如何访问 Create 事件中的实例变量?

How to get access to the instance variable within the Create event?

我在 GML2 Create 事件中有这段代码

inst1 = instance_create_layer(100, 100, "Instances", obj_genus)
inst2 = instance_create_layer(200, 100, "Instances", obj_genus)
with inst1 {
    txt = "Ying"
    related = inst2
}
with inst2 {
    txt = "Yang"
    related = inst1
}

但是我现在无法使用inst1inst2。我收到追随者错误:

ERROR in
action number 1
of Create Event
for object obj_game:

Variable obj_genus.inst2(100006, -2147483648) not set before
reading it.
at gml_Object_obj_game_Create_0(line 5)-     related = inst2
##################
gml_Object_obj_game_Create_0 (line 5)

我创建了一对彼此相关的对象。是否可以在 Create 事件中等待,直到对象被创建?不幸的是,没有 Post Create 事件或类似的事件。

我刚刚发现它在使用时可以正常工作 var。我不知道为什么会这样。 var表示一个变量只在本次活动中可用,活动结束后将被删除。

var inst1 = instance_create_layer(100, 100, "Instances", obj_genus)
var inst2 = instance_create_layer(200, 100, "Instances", obj_genus)
with inst1 {
    txt = "Ying"
    related = inst2
}
with inst2 {
    txt = "Yang"
    related = inst1
}

您的问题与实例创建无关,而是与 with 语句有关 - 看,with 更改了当前实例在块中的内容,因此从 related = inst2 行,您不是从 obj_game 中提取 inst2 变量,而是从应用语句的 obj_genus 中提取变量。

使用局部变量(你自己发现的)是迄今为止最简单的解决方法,因为局部变量是 function/event-wide 并且因此在 with 块中仍然可以完全访问。

如果您确实需要将这两个实例存储在 obj_game 中供以后使用,您可以使用 other.:

inst1 = instance_create_layer(100, 100, "Instances", obj_genus)
inst2 = instance_create_layer(200, 100, "Instances", obj_genus) // stores inst2 in obj_game
with inst1 {
    txt = "Ying"
    related = other.inst2 // uses inst2 from obj_game
}
with inst2 {
    txt = "Yang"
    related = other.inst1
}

除了 YellowAfterlife 的评论之外,这种情况可能可以完全避免使用“with”结构,而您可以改用此方法:

inst1 = instance_create_layer(100, 100, "Instances", obj_genus)
inst2 = instance_create_layer(200, 100, "Instances", obj_genus)
inst1.txt = "Ying"
inst1.related = inst2
inst2.txt = "Yang"
inst2.related = inst1

你是对的,没有像 post-create 事件这样的东西,你的做法是将数据传递给实例的正确和标准方式。

(附带一提,我强烈建议您养成在每行末尾添加分号 ; 的习惯。GML 非常宽容,通常会让您跳过它,但大多数语言都不是,包括 GLSL,这是您在 GMS1 和 2 中对着色器进行编程的方式。)