GameMaker Studio 2水平碰撞实现时按键控制反向问题求助
解决GameMaker Studio 2水平碰撞与按键反向问题
首先明确核心问题:你代码里的移动方向完全写反了,GameMaker的坐标系统中,x轴向右为数值增大,向左为数值减小,同时碰撞检测的逻辑也存在错误,下面是修正方案:
错误点梳理
- 按键控制逻辑反向:按左键时执行
x += 2(实际向右移动),按右键时执行x -= 2(实际向左移动),直接导致控制反向 - 碰撞检测偏移错误:左右碰撞的检测位置方向不对,碰撞后的位置修正逻辑也完全颠倒
修正后的Step事件代码
// Step事件代码 // 左键控制向左移动 if keyboard_check(vk_left) && dleft = true { x -= 2; // 向左移动,x值减小 // 检测角色左侧是否碰撞地面 if place_meeting(x - 12, y, Ground) { // 碰撞后修正位置,回到移动前的状态 x += 2; } } // 右键控制向右移动 if keyboard_check(vk_right) && dright = true { x += 2; // 向右移动,x值增大 // 检测角色右侧是否碰撞地面 if place_meeting(x + 12, y, Ground) { // 碰撞后修正位置,回到移动前的状态 x -= 2; } }
补充说明
- 如果你用的是自定义输入映射(不是系统默认的
vk_left/vk_right),替换成你的输入检测函数即可,比如input_check("left") - 代码里的
x±12是角色碰撞盒的偏移量,你可以根据自己角色的实际碰撞大小调整这个数值 - 碰撞修正逻辑是:先执行移动,检测到碰撞就将位置回退到移动前的状态,避免角色卡入地面
内容的提问来源于stack exchange,提问作者Samideveloper
相关产品推荐
相关产品推荐

