精灵

2013-12-21 135 views
0

30分钟谷歌搜索后,所有我能找到与C++ SDL碰撞是这样的: http://www.sdltutorials.com/sdl-collision精灵

我认为标题是误导性的,后来我发现它只是一个的方式在两个精灵之间的碰撞检测的噩梦。我想要的只是当我的玩家精灵接触别的东西时(另一个精灵)。我怎样才能做到这一点?

我看到有一个名为SDL_collision.h的库,但它可以是Pascal或空的。

回答

2

您可能会使用SDL_Rect作为边界框。其中xy是您的精灵的位置,而wh是精灵的宽度和高度。然后,您只需使用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 +高度”。使用这个修复函数,我犯了一个错字。

+0

这将解决我的问题,如果我没有得到'错误:标识符“SDL_HasIntersection”未定义“。我现在做错了什么? – yop

+0

@Yop尝试包括'SDL_rect.h' – 2013-12-21 19:59:04

+0

我尝试过包括SDL_rect.h,但是我的IDE说头不存在,所以我将它用GOOGLE搜索并放到了其他SDL头文件中。然后它说它需要SDL_pixels.h,我也没有。我下载了它,现在我收到了一堆错误。也许SDL_HasIntersection有不同版本的SDL或其他东西?我不认为我以正确的方式得到这个功能。 – yop