相机在三个点位间切换异常:跳过中间点、右侧点位抖动问题求助
相机在三个点位间切换异常:跳过中间点、右侧点位抖动问题求助
嘿,你的问题我一看就明白啦,这两个小问题其实都是代码里的细节没处理好导致的,我来帮你分析解决:
问题原因分析
- 跳过中间点:你用了
keyboard_check(vk_left/right),这个函数只要按键按住就会在每帧都触发,所以按住左右键的时候,b会快速从0跳到2(或者反过来),相机自然就直接跳过中间点位了。 - 右侧点位抖动:你每次固定移动20像素,但目标位置1989可能没法被20整除,比如当x到1970的时候,加20变成1990,这时候
x != 1989成立,又会减20回到1970,反复来回就造成了抖动。
修改后的代码
Create事件(这块不用改,保持原样)
places = [60, 1024, 1989]; b = 1;
Step事件(核心修改在这里)
// 改用keyboard_check_pressed,只在按键按下的第一帧触发切换 if (keyboard_check_pressed(vk_left)) { if (b != 0) { b--; } } if (keyboard_check_pressed(vk_right)) { if (b != 2) { b++; } } // 处理移动:判断当前距离目标的差值是否小于等于步长,是的话直接到位,否则继续移动 var target_x = places[b]; var step_size = 20; var diff = target_x - x; if (abs(diff) > step_size) { x += step_size * sign(diff); } else { x = target_x; }
额外说明
- 换成
keyboard_check_pressed后,每次按左右键只会切换一次点位,不会快速跳变,中间点就能正常停留了。 - 移动逻辑改成判断距离后直接到位,就避免了因为步长和目标点不匹配导致的来回抖动问题。
- 你之前尝试的范围判断没生效,应该是没写对逻辑,现在这个方法更稳妥。
试试这个修改,应该就能解决你的两个问题啦!
备注:内容来源于stack exchange,提问作者Noun_Adjective




