我正在使用我的破砖机并制作一个合适的碰撞系统,以便在逻辑上使球切换方向,我必须检测球撞到哪一侧砖。 这是我目前的剧本:
int sprite_collide(const Sprite item1, const Sprite item2)
{
if(item1.sShow == 0 || item2.sShow == 0) // return if any item is invisible
return 0;
if(item1.sCollide == 0 || item2.sCollide == 0)
return 0;
if((item2.sPos.x >= item1.sPos.x + item1.sImg->w) // too right
|| (item2.sPos.x + item2.sImg->w <= item1.sPos.x) // too left
|| (item2.sPos.y >= item1.sPos.y + item1.sImg->h) // too up
|| (item2.sPos.y + item2.sImg->h <= item1.sPos.y)) // too down
return 0;
return 1;
}
精灵结构:
typedef struct Sprite
{
SDL_Surface *sImg;
SDL_Rect sPos;
int sShow; // If sShow = 1, we show it.
int sCollide; // If sCollide = 1, then it's physic.
int sMoving; // If sMoving = 1, it'll be able to move
float sSpeed;
int sLife;
int sInit;
} Sprite;
答案 0 :(得分:1)
您只是在寻找任何碰撞,然后返回一个int值。我建议用另一种方法来识别球碰到的砖块的哪一侧。 像这样:
int sprite_collide(const Sprite item1, const Sprite item2)
{
if(item2.sPos.x >= item1.sPos.x + item1.sImg->w) // trop à droite
doAction(1);
if(item2.sPos.x + item2.sImg->w <= item1.sPos.x) // trop à gauche
doAction(2);
...
}
然后doAction()
方法会在砖块触及侧面时执行某些操作,就像您在评论中提到的那样。