背景:在 LCD 屏幕上显示的微处理器上开发小型游戏。
我正在尝试修复此碰撞检测功能,它的作用是检测墙壁精灵(1 x 25 像素)和玩家精灵(3x3 像素)之间的碰撞。它返回 1 或 0,如果 1 则玩家精灵的 dx/dy 发生变化,因此它停止移动。所以本质上,墙精灵被视为真正的墙。
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;
}
我的主要问题是指定精灵应该等于/大于/小于的确切数字,因此您可以在示例中看到,它是 3 或 -3。当我取出数字时,它返回 1 并停止精灵,无论它在哪里,因为精灵在技术上仍然与墙壁在同一 x 或 y 轴上,但它不是接近明智的,接触墙壁。什么是正确的尺寸参数?
案例问题:我的精灵应该只在直接接触墙壁时停止,目前它要么穿过墙壁,要么在没有靠近墙壁时停止。