GameMaker Studio 2平台游戏:敌人碰撞左墙跳出房间问题求助
问题修复方案
你的敌人碰撞左墙异常的问题,核心是水平碰撞检测逻辑错误,以下是具体问题和修复步骤:
核心问题分析
- 碰撞检测方向错误:水平碰撞时用
x+walksp检测,而非当前实际移动速度hsp。当敌人向左移动时(hsp=-walksp),代码检测的是敌人右侧位置,完全没检查左墙,导致碰撞触发失败。 - 碰撞推离逻辑被禁用:循环内的
x = x + sign(walksp)被注释,即使检测到碰撞,也不会将敌人推离墙壁,导致位置偏移。 - 方向反转逻辑错误:碰撞后直接将
hsp设为-walksp,而非反转当前hsp方向,无法适配向左移动的场景。
修复后的代码替换
将原水平碰撞部分的代码替换为以下内容:
//Horizontal collision if (place_meeting(x + hsp, y, oWall)) { // 将敌人逐步推离墙壁,直到刚好不发生碰撞 while (!place_meeting(x + sign(hsp), y, oWall)) { x = x + sign(hsp); } // 反转当前移动方向 hsp = -hsp; }
额外注意事项
- 确保敌人初始化时
hsp赋值正确:比如向右移动时hsp=walksp,向左时hsp=-walksp,保证sign(hsp)能正确反映移动方向。 - 检查
oWall对象的碰撞盒设置,避免因碰撞盒过小导致检测失效。
内容的提问来源于stack exchange,提问作者placeholder
相关产品推荐
相关产品推荐

