2016-03-26 2 views
0

У меня есть функция, которая должна возвращать true, если два круга сталкиваются и ложны в противном случае, и чтобы помочь во время разработки, я также добавил часть внутри функции, чтобы нарисовать hitbox только тогда, когда они не являются встречные.Allegro Circle Collision Detection

Моя проблема даже в том случае, когда они сталкиваются, она продолжит рисовать hitbox и говорит, что они не сталкиваются, указывая, что функция не работает должным образом.

int colliding(int x, int y, int r, int x1, int y1, int r1) 
{ 
    //compare the distance to combined radii 
    int dx = x1 - x; 
    int dy = y1 - y; 
    int radii = r + r1; 
    if ((dx * dx) + (dy * dy) < radii * radii) 
    { 
     return true; 
    } 
    else 
    { 
     player.hitbox.draw(); 
     return false; 
    } 
} 

int main() 
{ 
    while (true) 
    { 
     player.draw(); 

     int cx = 300; 
     int cy = 300; 
     int cr = 50; 

     al_draw_filled_circle(camera.getScreenPosX(cx), camera.getScreenPosY(cy), cr, al_map_rgb(0, 0, 0)); 
     colliding(player.hitbox.posX, player.hitbox.posY, player.hitbox.radius, cx, cy, cr); 


     al_flip_display(); 
     al_clear_to_color(al_map_rgb(255, 255, 255)); 
    } 
} 

ответ

0

Я предположил бы, что camera.getScreenPosX/Y() превращает сх/Cy/кр круг в другое пространство, чем та, где player.hitbox.posx/у есть. Однако я не могу быть уверен, потому что реализация player.hitbox.draw() не указана.

Функция collision кажется прекрасной, поэтому я бы пошел и проверил, находятся ли player.hitpox.posx/y и cx/cy в одном и том же координатном пространстве.

+0

Вы были правы, это было неправильно с позицией hitboxes, хотя я не уверен, что. Однако я могу найти способ обойти его. –