Game Maker修改跳跃高度无效:含角色穿平台等异常求助
Game Maker跳跃高度无效问题解决方法
核心问题分析
- 直接修改
y坐标属于硬位移,会绕过Game Maker的碰撞检测机制,导致角色穿过平台;同时这种瞬间位移不受重力影响,所以调整数值只会改变瞬间移动的距离,而非真正的跳跃高度。 - 你的跳跃逻辑没有作用在垂直速度
vsp上,而是直接修改位置,导致重力和跳跃的物理交互失效。
- 直接修改
具体修正步骤
- 重构跳跃逻辑,使用垂直速度控制
不要直接操作y,而是给垂直速度变量(比如vsp)设置负值来触发跳跃,只有在角色接触地面时才允许跳跃,避免空中多次跳:// 示例:空格键触发跳跃,仅在地面时生效 if (keyboard_check_pressed(vk_space) && place_meeting(x, y+1, obj_ground)) { vsp = -12; // 修改这个数值即可调整跳跃高度,数值绝对值越大跳得越高 } - 正确应用重力逻辑
确保isUmbrella变量正确切换重力值,并且每一步都把重力叠加到垂直速度上:// 根据isUmbrella设置不同重力 if (isUmbrella) { vsp += 0.2; // 低重力,下落更慢 } else { vsp += 0.8; // 标准重力 } - 配合碰撞检测更新位置
通过垂直速度更新y坐标,并在碰撞到平台时重置速度,避免穿模:// 应用垂直速度 y += vsp; // 检测地面碰撞 if (place_meeting(x, y, obj_ground)) { // 微调位置到平台表面 while (!place_meeting(x, y+sign(vsp), obj_ground)) { y += sign(vsp); } // 落地后重置垂直速度 vsp = 0; }
- 重构跳跃逻辑,使用垂直速度控制
补充说明
这样修改后,调整vsp = -12中的数值就能直接改变跳跃高度,同时重力会自然拉回角色,碰撞检测也能正常工作,不会出现穿平台的问题。
内容的提问来源于stack exchange,提问作者Mike Ly
相关产品推荐
相关产品推荐

