gpt4 book ai didi

2D 碰撞 - 检测侧面

转载 作者:行者123 更新时间:2023-11-30 15:32:32 29 4
gpt4 key购买 nike

我正在研究我的砖 block splinter 机,并制作一个适当的碰撞系统,以便使球逻辑地切换方向,我必须检测球与砖 block 的哪一侧碰撞。这是我当前的脚本:

int sprite_collide(const Sprite item1, const Sprite item2)
{
if(item1.sShow == 0 || item2.sShow == 0) // return if any item is invisible
return 0;

if(item1.sCollide == 0 || item2.sCollide == 0)
return 0;

if((item2.sPos.x >= item1.sPos.x + item1.sImg->w) // too right
|| (item2.sPos.x + item2.sImg->w <= item1.sPos.x) // too left
|| (item2.sPos.y >= item1.sPos.y + item1.sImg->h) // too up
|| (item2.sPos.y + item2.sImg->h <= item1.sPos.y)) // too down
return 0;

return 1;
}

Sprite 结构:

typedef struct Sprite
{
SDL_Surface *sImg;
SDL_Rect sPos;

int sShow; // If sShow = 1, we show it.
int sCollide; // If sCollide = 1, then it's physic.
int sMoving; // If sMoving = 1, it'll be able to move
float sSpeed;

int sLife;
int sInit;

} Sprite;

最佳答案

您只是寻找任何碰撞,然后返回一个 int 值。我建议采用另一种方法来识别球接触到砖 block 的哪一侧。像这样的事情:

int sprite_collide(const Sprite item1, const Sprite item2)
{
if(item2.sPos.x >= item1.sPos.x + item1.sImg->w) // trop à droite
doAction(1);
if(item2.sPos.x + item2.sImg->w <= item1.sPos.x) // trop à gauche
doAction(2);
...
}

然后,当砖 block 接触侧面时,doAction() 方法将执行某些操作,就像您在评论中提到的那样。

祝你好运。

关于2D 碰撞 - 检测侧面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24200311/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com