尝试在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
然后在玩家角色的步骤事件中运行此代码:
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将无法识别变量?
答案 0 :(得分:0)
我最好的猜测是,在玩家创建事件和发生错误的步骤事件之间,一个或多个敌人实例已被破坏。也许更好的解决方案是使用with()构造迭代所有敌人,这样更快,你可以确定你正在使用的所有实例都存在。
答案 1 :(得分:0)
尝试在对象变量周围放置括号。我以前在参考扩展中引用了麻烦。
(global.ttarget[g]).range
甚至将其保存到新变量
for (g = 0; g<global.rmtargets; g+=1)
{
curr_target = global.ttarget[g]
curr_target.range
}
答案 2 :(得分:0)
而不是使用全局。在代码中每个变量实例之前,您还可以使用以下命令对其进行初始化:
globalvar(变量),(变量2);
然后你就可以使用没有全局的变量了。在它面前:)
如果对象rk不是敌人,则没有对象rk可检测到的全局范围变量。初始化为var或globalvar的变量仅适用于它所定义的对象。
答案 3 :(得分:0)
首先,在有条件的情况下放在方括号中。
第二,您应该提供有关您的环境和编程逻辑以及IMO的更多信息,停止使用所有这些全局变量。
无论如何,根据我对您正在做的事情的了解,请尝试使用 with 关键字:
with(global.ttarget[g]) {
other.hv = range;
}