Game Maker Studio,脚本参数不响应变量
Posted
技术标签:
【中文标题】Game Maker Studio,脚本参数不响应变量【英文标题】:Game Maker Studio, script arguments not responding to variables 【发布时间】:2016-07-15 10:00:46 【问题描述】:为了让我的游戏更加动态,我创建了一个脚本,其中使用了参数以便被预定义的变量替换。
点击鼠标左键,出现代码:
script_execute(scrShoot, weapon1, ammo1);
其中 Weapon1 和 ammo1 是局部变量。
简单的脚本'scrShoot'如下:
if argument0 = 1
argument1 -= 0.05;
instance_create(x,y,objBullet);
if argument0 = 2
argument1 -= 0.05;
repeat(4)
instance_create(x,y,objBullet2);
argument0 按预期工作,已成功被武器 1 替换,但变量 ammo1 从未减少。
当我手动写入 ammo1 代替参数 1 时,脚本工作正常;每次点击减少 0.05。
其他使用脚本的测试让我相信问题在于使用变量替换参数:字符串和数字按预期工作。
我在不止一种情况下遇到过这个问题,我很困惑互联网上似乎没有其他人遇到过同样的问题。
【问题讨论】:
【参考方案1】:当您将一个数字作为参数传递给脚本时,您是在为该脚本提供一个要使用的数字的副本。也就是说,脚本看不到你传递了它ammo1
——它只看到你传递了它,比如50
。 argument1 -= 0.05
行只是修改脚本接收的副本,而不是 ammo1
本身。
这称为传递参数按值(给脚本一个它可以修改的副本),而不是通过引用(将脚本指向一个变量修改)。
见:What's the difference between passing by reference vs. passing by value?
GML 本身没有通过引用传递参数的语法,所以你很不走运。我相信您可以做的是将实例 ID(如 self
或 other
,或调用 instance_create
的结果)传递给脚本:
/// scrShoot()
var o = argument0;
if (o.weapon == 1)
o.ammo -= 0.05;
instance_create(x, y, objBullet);
/// Your object
script_execute(scrShoot, self);
【讨论】:
以上是关于Game Maker Studio,脚本参数不响应变量的主要内容,如果未能解决你的问题,请参考以下文章
Game Maker Studio:前 10 名高分(认真)
如何在 Game Maker Studio 2 中跟踪随机遭遇的步骤