0

尝试在 GameMaker8 Pro 中为 MMO 风格的游戏设置目标数组,我在玩家角色的创建事件中有此代码,该代码运行良好,并且一直运行良好:

j = 0
i = 0
g = 0
for (i=100000; i<1000000; i+=1) if instance_exists(i) {if i.object_index = enemy         {global.ttarget[j] = i j+=1}  if i.object_index = rk or i.object_index = sage    {global.etarget[g] = i g += 1}}
global.rmtargets = j
global.etargets = g

然后在玩家角色的 step 事件中运行此代码:

h = 0
g = 0
i = 0
for (i=0; i<global.rmtargets; i+=1) global.target[i] = 0
global.target[0]=101139
for (h = 0; h<global.rmtargets; h+=1){hv = -1
for (g = 0; g<global.rmtargets; g+=1){if global.ttarget[g].range > hv {hv =    global.ttarget[g].range}}
global.target[h] = hv
global.ttarget[h] = -1}

返回此错误消息:

ERROR in
action number 1
of  Step Event
for object rk:

Error in code at line 8: for (g = 0; g<global.rmtargets; g+=1){if global.ttarget[g].range > hv {hv = global.ttarget[g].range}}
at position 61: Unknown variable range

即使我在敌人的创建事件中有这个:

range = 0
range = distance_to_object(rk)

而且我一直使用这种语法:

global.target[target].threat[s] += damage

帮助?任何想法为什么 Game Maker 无法识别该变量?

4

4 回答 4

0

而不是使用全局。在代码中变量的每个实例之前,您还可以使用以下命令对其进行初始化:

全局变量(变量),(变量2);

然后你就可以在没有全局变量的情况下使用该变量。在它面前:)

如果对象 rk 不是敌人,则对象 rk 无法检测到全局范围变量。没有 var 或 globalvar 初始化的变量仅适用于定义它的对象。

于 2013-07-25T20:15:15.753 回答
0

我最好的猜测是,在玩家创建事件和发生错误的步骤事件之间,一个或多个敌人实例已被破坏。也许更好的解决方案是使用 with() 构造遍历所有敌人,这样更快,并且您可以确定您正在使用的所有实例都实际存在。

于 2011-05-28T21:19:01.680 回答
0

尝试在对象变量周围加上括号。我之前在参考扩展名中遇到过麻烦。

(global.ttarget[g]).range

甚至将其保存到新变量中

for (g = 0; g<global.rmtargets; g+=1)
{
    curr_target = global.ttarget[g]
    curr_target.range
}
于 2012-10-15T07:14:54.560 回答
0

首先,将圆括号放在 if 条件中。

其次,您应该提供有关您的环境和编程逻辑的更多信息,并且 IMO停止使用所有这些全局变量

无论如何,根据我对你在做什么的理解,尝试使用with关键字:

with(global.ttarget[g]) {

other.hv = range;

}
于 2020-09-09T16:09:55.330 回答