You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GameMaker Studio 2赛车移动脚本求助:图形异常+代码简化与转向需求

问题解决与优化方案

一、图形异常的根源与修复

原代码同时修改内置speed变量,又手动通过lengthdir_x/y更新x/y坐标,导致GameMaker内置移动逻辑与自定义移动逻辑冲突,引发抖动、瞬移等图形异常。核心修复方式是放弃使用内置speed变量,改用自定义变量存储当前速度,彻底避免逻辑冲突。

二、简化后的完整代码(含转向功能)

// objPlayerCar Step事件脚本
// 自定义移动参数(可根据手感调整)
var _accel = 0.8;
var _decel = 0.3;
var _max_speed = 5;
var _min_speed = -2;
var _friction = 0.1;
var _turn_speed = 3; // 基础转向速度

// 初始化自定义速度(首次运行时赋值)
if (!variable_exists("current_speed")) {
    current_speed = 0;
}

// 1. 油门/刹车逻辑
if (keyboard_check(ord("S"))) {
    current_speed += _accel;
} else if (keyboard_check(ord("W"))) {
    current_speed -= _accel;
} else {
    // 无输入时自动减速
    current_speed = approach(current_speed, 0, _decel);
}

// 2. 应用摩擦力
current_speed = approach(current_speed, 0, _friction);

// 3. 限制速度范围
current_speed = clamp(current_speed, _min_speed, _max_speed);

// 4. 转向逻辑(仅当车辆有速度时生效,符合真实驾驶逻辑)
if (current_speed != 0) {
    var _turn_dir = 0;
    if (keyboard_check(ord("A"))) _turn_dir = -1;
    if (keyboard_check(ord("D"))) _turn_dir = 1;
    
    // 高速时转向幅度降低,提升操作真实感
    var _turn_factor = abs(current_speed) / _max_speed;
    direction += _turn_dir * _turn_speed * _turn_factor;
}

// 5. 执行移动(仅用自定义速度计算,避免冲突)
x += lengthdir_x(current_speed, direction);
y += lengthdir_y(current_speed, direction);

三、关键优化说明

  • 图形异常修复:用自定义current_speed替代内置speed,消除双重移动逻辑冲突,彻底解决抖动、瞬移问题。
  • 代码简化:使用approach()函数替代重复的if-else减速判断,用clamp()函数简化速度范围限制,逻辑更简洁易读。
  • 转向功能实现:
    • 仅当车辆有速度时允许转向,符合真实驾驶逻辑;
    • 加入速度关联的转向系数,高速时转向更平缓,优化操作手感;
    • 通过A/D键控制左右转向,转向速度可通过_turn_speed灵活调整。

内容的提问来源于stack exchange,提问作者Adam Moss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 18:50:22