【发布时间】:2014-06-13 16:36:00
【问题描述】:
我正在研究我的砖块破碎机并制作一个适当的碰撞系统以使球在逻辑上切换方向,我必须检测球与砖的哪一侧发生碰撞。 这是我当前的脚本:
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;
}
Sprite 结构:
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;
【问题讨论】:
-
运行这段代码会得到什么行为?
-
chouaib : 如果这些项目之一没有碰撞器,或者如果这些项目之一没有显示,我们不处理它们(我有一些项目没有对撞机)。如果项目 2 太靠右、靠左、靠上或靠下,那么它就不会发生碰撞。如果我们达到了所有这些“如果”,那就意味着发生了冲突。
-
你的精灵是矩形的吗?你能粘贴你的精灵结构代码吗?
-
是的,一切都是矩形的,不会很复杂
-
您在下面的评论中提到您返回
COLHAUTCOLBAS等...您可以发布那部分代码吗? P.S:还是不明白你的问题