gpt4 book ai didi

c - 检测与由多个像素宽度和高度组成的 Sprite 的碰撞

转载 作者:太空宇宙 更新时间:2023-11-04 03:38:30 27 4
gpt4 key购买 nike

背景:在 LCD 屏幕上显示的微处理器上开发一个小游戏。

我正在尝试修复此碰撞检测功能,它的作用是检测墙壁 Sprite (1 x 25 像素)和玩家 Sprite (3x3 像素)之间的碰撞。它返回 1 或 0,如果 1 则玩家 Sprite 的 dx/dy 发生变化,因此它停止移动。所以本质上,墙 sprite 被视为一堵真正的墙。

int wall_collision(Sprite *w_sprite)
{

if (((w_sprite->x >= wall_sprite.x) && ((w_sprite->x - wall_sprite.x) < 3)) && ((w_sprite->y >= wall_sprite.y) && ((w_sprite->y - wall_sprite.y) < 3)))
return 1;

if (((w_sprite->x <= wall_sprite.x) && ((w_sprite->x - wall_sprite.x) > -3)) && ((w_sprite->y >= wall_sprite.y) && ((w_sprite->y - wall_sprite.y) < 3)))
return 1;

if (((w_sprite->x >= wall_sprite.x) && ((w_sprite->x - wall_sprite.x) < 3)) && ((w_sprite->y <= wall_sprite.y) && ((w_sprite->y - wall_sprite.y) > -3)))
return 1;

if (((w_sprite->x <= wall_sprite.x) && ((w_sprite->x - wall_sprite.x) > -3)) && ((w_sprite->y <= wall_sprite.y) && ((w_sprite->y - wall_sprite.y) > -3)))
return 1;

return 0;
}

我的主要问题是指定 Sprite 应该等于/大于/小于的确切数字,所以正如您在示例中看到的那样,它是 3 或 -3。当我取出数字时,它返回 1 并停止 sprite,无论它在哪里,因为 sprite 在技术上仍然与墙在同一 x 或 y 轴上,但它不是接近明智的,接触墙壁。正确的尺寸参数是多少?

案例问题:我的 Sprite 只有在直接接触墙壁时才会停止,目前它要么穿过墙壁,要么在甚至没有靠近墙壁时停止。

最佳答案

首先,您的代码似乎有点复杂 - 下面是检测碰撞的规范(或者我相信)方法。使用此功能,我们不必手动检查每个碰撞,而是可以检测碰撞器 AB 之间的任何碰撞。请记住,这里使用的 collider 结构必须包含有关 topbottomleft 的信息和 right 每个对撞机的坐标。然后,您可以将所有碰撞器存储在一个数组中,然后通过它们进行索引以检查碰撞。函数:

int collisionFunction(collider * A, collider * B){

//Check to see if the colliders are "lined up" on the X-axis
if( (A->right > B->left ) && (B->right > A->left) ){

//Check to see if the colliders are also "lined up" on the Y-axis
if( (A->top < B->bottom) && (B->top < A->bottom) ){
return 1; // COLLISION DETECTED
}
}

return 0;//NO COLLISION DETECTED
}

函数/算法的解释:首先,我们检查AB是否在x 轴。通过“排列”,我的意思是说两个对撞机可能会根据它们在 X 轴上的位置发生碰撞。然后,我们检查每个对撞机是否在 Y 轴上排列。如果满足这两个条件,则对撞机发生碰撞。 一开始可能有点难以理解,所以我建议您通过在纸上画出形状(一些碰撞,另一些不碰撞)来追踪,看看算法是否表明它们正在碰撞。该算法适用于原点(即 (0,0) )位于屏幕左上角的坐标系,这是二维图形的惯例

请记住,您的玩家在使用此算法时会部分穿墙 - 这在 2D 游戏中很常见。但是,考虑到您使用的像素数量,这显然是个问题。因此,在实现此算法时应考虑到这一点。

关于c - 检测与由多个像素宽度和高度组成的 Sprite 的碰撞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30394108/

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