You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

相机在三个点位间切换异常:跳过中间点、右侧点位抖动问题求助

相机在三个点位间切换异常:跳过中间点、右侧点位抖动问题求助

嘿,你的问题我一看就明白啦,这两个小问题其实都是代码里的细节没处理好导致的,我来帮你分析解决:

问题原因分析

  1. 跳过中间点:你用了keyboard_check(vk_left/right),这个函数只要按键按住就会在每帧都触发,所以按住左右键的时候,b会快速从0跳到2(或者反过来),相机自然就直接跳过中间点位了。
  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

火山引擎 最新活动