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