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——它只看到你传递了它,比如50argument1 -= 0.05 行只是修改脚本接收的副本,而不是 ammo1 本身。

这称为传递参数按值(给脚本一个它可以修改的副本),而不是通过引用(将脚本指向一个变量修改)。

见:What's the difference between passing by reference vs. passing by value?

GML 本身没有通过引用传递参数的语法,所以你很不走运。我相信您可以做的是将实例 ID(如 selfother,或调用 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 网络客户端到服务器通信

Game Maker Studio的位置问题

如何在 Game Maker Studio 2 中跟踪随机遭遇的步骤

在 Game maker studio 2.0 中写入电子表格

使用 Game Maker Studio 2 中的快速排序算法对列表进行排序