Napisałem sobie funkcję place_free, która sprawdza czy na danej pozycji X i Y nie znajduje się jakiś obiekt ( w tym wypadku jest to tablica obiektów-przeszkód :P ). No ale nie do końca działa, tzn wygląda na to że zwraca fałsz, gdyż nie mogę poruszyć się innym obiektem, ale do rzeczy:
bool place_free ( int _x, int _y, cBlock __objB[] )
{
int bbox_left, bbox_right, bbox_top, bbox_bottom;
for ( int i=0; i<blocks_number; i++ )
{
bbox_left = __objB[i].x;
bbox_right = __objB[i].x+__objB[i].w;
bbox_top = __objB[i].y;
bbox_bottom = __objB[i].y+__objB[i].h;
if ( !((bbox_left > _x || bbox_right < _x) && (bbox_top > _y || bbox_bottom < _y)) )
return false;
}
return true;
}
Tak wygląda owa funkcja, a teraz wywołanie w kodzie:
__key_state = SDL_GetKeyState( NULL );
if ( __key_state[SDLK_LEFT] )
{
if (place_free( objPlayer.x-1, objPlayer.y, *objBlocks )) {
objPlayer.x -= 1;
objPlayer.direction = 0;
}
}
if ( __key_state[SDLK_RIGHT] )
{
if (place_free( objPlayer.x+1, objPlayer.y, *objBlocks )) {
objPlayer.x += 1;
objPlayer.direction = 1;
}
}
I jeszcze tworzenie obiektów objBlocks[]:
cBlock *objBlocks[100];
objBlocks[0] = new cBlock( 64, 64, true, 16, 16 );
objBlocks[1] = new cBlock( 64, 80, true, 16, 16 );
objBlocks[2] = new cBlock( 80, 64, true, 16, 16 );
objBlocks[3] = new cBlock( 96, 64, true, 16, 16 );
Wydaje się być wszystko OK, ale muszę jeszcze przyznać żę miałem problem z przekazaniem tablicy obiektów objBlocks[] do owej funkcji udało mi się to podając ją tak jak jest teraz ( *objBlocks wtf? ).
jeżeli ktoś wie gdzie jest przyczyna i mógłby przybliżyć mi nieco zasady przekazywania tych tablic to byłbym wdzięczny ;)
Z góry dzięki!