GML中Create事件定义的布尔量在Step事件中失效求助
GMS2贪吃蛇WASD无响应的原因解析
核心问题出在GMS2事件的执行时机和keyboard_check_pressed函数的特性上:
Create事件的执行逻辑
Create事件只在对象实例被创建的第一帧执行一次。你在这里定义Right/Left/Up/Down变量时,keyboard_check_pressed只会检测创建瞬间的按键状态——这时候你还没来得及按下WASD,所以这些变量会被赋值为false,之后再也不会更新。Step事件里一直用这个初始的false值判断,自然触发不了移动逻辑。Step事件的执行逻辑
Step事件是每游戏帧都会执行一次的事件。把按键检测移到这里后,每帧都会重新调用keyboard_check_pressed检查当前的按键状态:只要你在某一帧按下WASD对应按键,变量就会被赋值为true,进而触发移动的alarm逻辑,蛇就能正常响应输入了。为什么数组和snakeSpeed没问题?
因为这些是静态配置(比如蛇的速度、初始身体数组),只需要在创建时初始化一次就够了,不需要每帧更新,所以放在Create事件里完全没问题。但按键状态是动态变化的,必须每帧实时检测,所以必须放在Step事件中。
内容的提问来源于stack exchange,提问作者Sam Wellborn
相关产品推荐
相关产品推荐

