0
30分钟谷歌搜索后,所有我能找到与C++ SDL碰撞是这样的: http://www.sdltutorials.com/sdl-collision精灵
我认为标题是误导性的,后来我发现它只是一个的方式在两个精灵之间的碰撞检测的噩梦。我想要的只是当我的玩家精灵接触别的东西时(另一个精灵)。我怎样才能做到这一点?
我看到有一个名为SDL_collision.h的库,但它可以是Pascal或空的。
30分钟谷歌搜索后,所有我能找到与C++ SDL碰撞是这样的: http://www.sdltutorials.com/sdl-collision精灵
我认为标题是误导性的,后来我发现它只是一个的方式在两个精灵之间的碰撞检测的噩梦。我想要的只是当我的玩家精灵接触别的东西时(另一个精灵)。我怎样才能做到这一点?
我看到有一个名为SDL_collision.h的库,但它可以是Pascal或空的。
您可能会使用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);
“右”和“底”分别指“x +宽度”和“y +高度”。使用这个修复函数,我犯了一个错字。
这将解决我的问题,如果我没有得到'错误:标识符“SDL_HasIntersection”未定义“。我现在做错了什么? – yop
@Yop尝试包括'SDL_rect.h' – 2013-12-21 19:59:04
我尝试过包括SDL_rect.h,但是我的IDE说头不存在,所以我将它用GOOGLE搜索并放到了其他SDL头文件中。然后它说它需要SDL_pixels.h,我也没有。我下载了它,现在我收到了一堆错误。也许SDL_HasIntersection有不同版本的SDL或其他东西?我不认为我以正确的方式得到这个功能。 – yop