在谷歌搜索30分钟后,我能找到的就是: http://www.sdltutorials.com/sdl-collision
我认为标题是误导性的,然后我注意到这只是一种检测两个精灵之间碰撞的噩梦。我想要的只是检查我的玩家精灵何时触摸其他东西(另一个精灵)。我怎么能做到这一点?
我读到有一个名为SDL_collision.h的库,但它是Pascal或空的。
答案 0 :(得分:2)
您可能会使用SDL_Rect
作为边界框。其中x
和y
是精灵的位置,w
和h
是精灵的宽度和高度。然后,您需要做的就是使用SDL_HasIntersection
。
这是一个简单的例子:
SDL_Surface *Srfc1, *Srfc2;
Srfc1= IMG_Load("foo.png");
Srfc2= Srfc1;
Srfc2->refcount++;
SDL_Rect box1, box2;
box1.x = box1.y = 0;
box2.x = box2.y = 100;
box1.w = box2.w = Srfc1->w;
box2.h = box2.h = Srfc1->h;
// ... somewhere in your event handling logic
if (SDL_HasIntersection(&box1, &box2))
{
printf("Collision.");
}
// ...
SDL_FreeSurface(Srfc1);
SDL_FreeSurface(Srfc2);
由于您没有SDL_HasIntersection
,这里有一个适合您需求的快速小功能:
bool IntersectRect(const SDL_Rect * r1, const SDL_Rect * r2)
{
return !(r2->x > (r1->x + r1->w) ||
(r2->x + r2->w) < r1->x ||
r2->y > (r1->y + r1->h) ||
(r2->y + r2->h) < r1->y);
);
}
供参考,逻辑是:
return !(r2.left > r1.right ||
r2.right < r1.left ||
r2.top > r1.bottom ||
r2.bottom < r1.top);
'right'和'bottom'分别表示'x + width'和'y + height'。用这个来修复函数,因为我写错了。