Reputation: 603
I have this code in GML2 Create
event
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
}
But I can't use inst1
or inst2
at this time. I get the follower error:
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)
I create pairs of objects which are related to each other. Is it possible to wait in the Create
event, until the object has been created? Unfortunately there is no Post Create
event or something like that.
Upvotes: 0
Views: 1853
Reputation: 75
In addition to YellowAfterlife's comment, this situation probably could avoid using the "with" construct entirely, and you could get away with this instead:
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
You're correct that there isn't anything like post-create event, and how you are doing it is the correct and standard way of passing data to an instance.
(On a side note I highly recommend getting in the habit of putting a semicolon ; at the end of every line. GML is pretty forgiving and usually lets you skip it, but most languages aren't, including GLSL which is how you program shaders in both GMS1 and 2.)
Upvotes: 3
Reputation: 3202
Your problem is not related to instance creation, but rather to the with
statement - see, with
changes what the current instance will be in the block, therefore as of related = inst2
line you are not pulling the inst2
variable from obj_game
, but rather from obj_genus
that you apply the statement on.
Using local variables (which you have found yourself) is by far the easiest way around this, as local variables are function/event-wide and thus remain perfectly accessible inside a with
-block.
If you do need those two instances stored in obj_game
for later use, you could use 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
}
Upvotes: 3
Reputation: 603
I just found out that it will work fine when is use var
. I have no idea why it is so. var
means that a variable is only available in this event and will be deleted when the event finished.
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
}
Upvotes: 1