GML玩家精灵频繁切换、落地后仅可跳跃问题求助
GameMaker玩家移动&动画Bug修复方案
核心问题定位及修复
以下是针对「持续下滑、落地后水平移动失效、精灵闪烁」三个问题的具体修复:
1. 跳跃逻辑语法错误(导致落地后状态异常)
原代码中跳跃判断的canJump -- > 0是错误写法:
if (canJump -- > 0) && (_keyJump)
--是后置递减运算符,会每帧强制让canJump减1(哪怕没按跳跃键),导致落地后设置的canJump=7会在7帧后直接归零,同时干扰移动逻辑的状态判断。
修复为:
if (canJump > 0 && _keyJump)
2. 地面检测精度问题(导致精灵快速切换闪烁)
原动画逻辑用place_meeting(x,y+1,obj_wall)判断是否落地,y+1的固定偏移会因为精灵原点、碰撞盒位置,出现「时而检测到地面、时而检测不到」的帧间波动,导致精灵在跳跃和idle状态来回跳。
修复方案:直接复用碰撞处理中已经确认的canJump状态(canJump>0就代表玩家在地面),替换动画判断逻辑:
//Animation if (canJump == 0) // 不在地面时显示跳跃精灵 { sprite_index = spr_player_jumping; image_speed = 0; image_index = sign(vsp) > 0 ? 1 : 0; } else // 在地面时根据水平速度切换 idle/奔跑 { image_speed = 1; sprite_index = hsp == 0 ? spr_player_idle : spr_player_running; }
3. 水平移动无响应问题(落地后冻结)
结合上面的修复后,再检查两个关键点:
- 确保
obj_wall的碰撞盒没有错误覆盖玩家的水平移动路径(比如碰撞盒过高,导致玩家落地后被墙的碰撞盒卡住水平移动) - 原水平碰撞逻辑中,
while循环的处理可以简化,避免因浮点精度问题导致hsp无法归零://Collide and Move - 水平部分优化 if (place_meeting(x + hsp, y, obj_wall)) { // 直接移动到碰撞边缘,替代循环减半的逻辑 while (!place_meeting(x + sign(hsp), y, obj_wall)) { x += sign(hsp); } hsp = 0; } x += hsp;
修复后完整Step Event代码
//Get Player Input var _keyLeft = keyboard_check(vk_left); var _keyRight = keyboard_check(vk_right); var _keyJump = keyboard_check_pressed(vk_space); //Work out where to move horizontally hsp = (_keyRight - _keyLeft) * hspWalk; //Work out where to move vertically vsp = vsp + grv; //Work out if we should jump if (canJump > 0 && _keyJump) { vsp = vspJump; canJump = 0; } //Collide and Move - 水平 if (place_meeting(x + hsp, y, obj_wall)) { while (!place_meeting(x + sign(hsp), y, obj_wall)) { x += sign(hsp); } hsp = 0; } x += hsp; //Collide and Move - 垂直 if (place_meeting(x, y + vsp, obj_wall)) { if (vsp > 0) canJump = 7; while (!place_meeting(x, y + sign(vsp), obj_wall)) { y += sign(vsp); } vsp = 0; } y += vsp; //Animation if (canJump == 0) { sprite_index = spr_player_jumping; image_speed = 0; image_index = sign(vsp) > 0 ? 1 : 0; } else { image_speed = 1; sprite_index = hsp == 0 ? spr_player_idle : spr_player_running; }
内容的提问来源于stack exchange,提问作者Bluetooth
相关产品推荐
相关产品推荐

