Game Maker运行WASD移动代码触发DoAdd:2:undefined value报错
问题原因
- 你代码中使用的
phy_position_x、phy_position_y是Game Maker物理引擎专属的内置变量,只有你给当前实例绑定的对象开启了「使用物理」属性时,这两个变量才会被系统初始化赋值 - 你当前没有给对应对象开启物理功能,导致
phy_position_x、phy_position_y都是未定义值,对未定义值执行加减运算时就会触发DoAdd:2:undefined value报错
解决方案
根据你的开发需求选择对应方案即可:
- 方案1:不需要物理引擎的普通移动
直接把代码里的phy_position_x、phy_position_y替换成普通实例坐标变量x、y即可,修改后代码如下:
if (keyboard_check(ord("W"))) { y -= 4; } if (keyboard_check(ord("A"))) { x -= 4; } if (keyboard_check(ord("S"))) { y += 4; } if (keyboard_check(ord("D"))) { x += 4; }
- 方案2:确实需要使用物理引擎实现移动
首先给对应对象开启物理属性:打开对象编辑界面,勾选「物理」分类下的使用物理选项。注意不要直接修改phy_position_x/phy_position_y,这种硬改坐标的方式不符合物理引擎的运作逻辑,推荐用phy_speed_x/phy_speed_y实现物理移动,示例代码如下:
// 先重置速度避免累加 phy_speed_x = 0; phy_speed_y = 0; if (keyboard_check(ord("W"))) { phy_speed_y = -4; } if (keyboard_check(ord("A"))) { phy_speed_x = -4; } if (keyboard_check(ord("S"))) { phy_speed_y = 4; } if (keyboard_check(ord("D"))) { phy_speed_x = 4; }
内容的提问来源于stack exchange,提问作者YuraLizard
相关产品推荐
相关产品推荐

