精靈

2013-12-21 133 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