Moin,
ich bin neu hier. Ich habe mir haufenweise Tutorials angesehen und auch dieses Forum hat mir schon oft weitergeholfen. Nun allerdings habe ich ein Problem, das ich einfach nicht gelöst bekomme:
Im Multiplayer lasse ich in einem step-Event alle ankommenden Nachrichten verarbeiten. Bei zwei bstimmten id's (der Message) soll beim Slave ein Objekt erstellt werden. Einmal funktioniert es reibungslos (Kugel, id=6) und einmal nicht (id=12).
Hier ist ein Ausschnitt des Codes zum Senden der Message:
Hier ist der Code der Message-Verarbeitung:
Alles anzeigen
Und hier der Code meines eigenen Skripts "script_explode":
Ich habe mit dem show_message-Befehl schon einige Variablen ingame überprüft. Der String wird korrekt aufgeteilt und übergeben. Die Variablen posx, posy und typ enthalten die richtigen Werte. Wenn ich mir die instance_id des neu erstellten Objektes ausgeben lasse, stimmt auch diese. Sie wird allerdings weder auf dem Bildschirm vom Slave angezeigt, noch kann ich außerhalb der Funktion darauf zugreifen (z.B. instance_number gibt immer 0 zurück).
Meine Vermutung ist, dass ich entweder den Wald vor lauter Bäumen nicht sehe oder das Objekt nur innerhalb der Funktion besteht und anschließend gleich wieder zerstört wird. (Ich vermute ersteres
)
So, ich hoffe, dass war jetzt nicht allzu verwirrend.
ich bin neu hier. Ich habe mir haufenweise Tutorials angesehen und auch dieses Forum hat mir schon oft weitergeholfen. Nun allerdings habe ich ein Problem, das ich einfach nicht gelöst bekomme:
Im Multiplayer lasse ich in einem step-Event alle ankommenden Nachrichten verarbeiten. Bei zwei bstimmten id's (der Message) soll beim Slave ein Objekt erstellt werden. Einmal funktioniert es reibungslos (Kugel, id=6) und einmal nicht (id=12).
Hier ist ein Ausschnitt des Codes zum Senden der Message:
Hier ist der Code der Message-Verarbeitung:
Quellcode
- //1-x, 2-y, 3-direction, 4-speed, 5-top_direction, 6-fire, 7-Cash, 8-global.weight2, 9-global.bulletlife2, 10-bottom_sprite, 11-top_sprite, 12-instance-create
- var messid, val, posx, posy, typ, speicher, kugel, richtung;
- while (mplay_message_receive(0)) {
- messid = mplay_message_id();
- val = mplay_message_value();
- //Nachrichten nur für den Master
- if (global.master) {
- if (messid == 1) obj_bottom2.x = val;
- if (messid == 2) obj_bottom2.y = val;
- if (messid == 3) {obj_bottom2.direction = val; obj_bottom2.image_angle=val;}
- if (messid == 4) obj_bottom2.speed = val;
- if (messid == 5) {obj_top2.direction = val; obj_top2.image_angle=val;}
- if (messid == 6) {
- richtung=obj_top2.direction;
- kugel=instance_create(obj_top2.x+lengthdir_x(24,richtung),obj_top2.y+lengthdir_y(24,richtung),obj_bullet2);
- kugel.direction=obj_top2.direction;
- kugel.speed=val;
- }
- if (messid == 10) {obj_bottom2.image_index=val;}
- if (messid == 11) {obj_top2.image_index=val;}
- }
- //Nachrichten nur für den Slave
- else {
- if (messid == 1) obj_bottom1.x = val;
- if (messid == 2) obj_bottom1.y = val;
- if (messid == 3) {obj_bottom1.direction = val; obj_bottom1.image_angle=val;}
- if (messid == 4) obj_bottom1.speed = val;
- if (messid == 5) {obj_top1.direction = val; obj_top1.image_angle=val;}
- if (messid == 6) {
- richtung=obj_top1.direction;
- kugel=instance_create(obj_top1.x+lengthdir_x(24,richtung),obj_top1.y+lengthdir_y(24,richtung),obj_bullet2);
- kugel.direction=richtung;
- kugel.speed=val;
- }
- if (messid == 10) {obj_bottom1.image_index=val;}
- if (messid == 11) {obj_top1.image_index=val;}
- if (messid == 12) {
- speicher=script_execute(script_explode(val));
- posx=ds_list_find_value(speicher,0);
- posy=ds_list_find_value(speicher,1);
- typ=ds_list_find_value(speicher,2);
- instance_create(posx,posy,typ);
- ds_list_destroy(speicher);
- }
- }
- //Nachrichten für beide
- if (messid == 7) {global.cash+=val;}
- if (messid == 8) {global.weight2=val;}
- if (messid == 9) {global.bulletlife2=val;}
- }
Und hier der Code meines eigenen Skripts "script_explode":
Quellcode
- var stelle,text,speicher;
- text=string(argument0);
- speicher=ds_list_create();
- while (string_count("|",text)>0) do {
- stelle=string_pos("|",text);
- ds_list_add(speicher,string_copy(text,0,stelle-1));
- text=string_copy(text,stelle+1,string_length(text)-stelle);
- }
- ds_list_add(speicher,text);
- return speicher;
Ich habe mit dem show_message-Befehl schon einige Variablen ingame überprüft. Der String wird korrekt aufgeteilt und übergeben. Die Variablen posx, posy und typ enthalten die richtigen Werte. Wenn ich mir die instance_id des neu erstellten Objektes ausgeben lasse, stimmt auch diese. Sie wird allerdings weder auf dem Bildschirm vom Slave angezeigt, noch kann ich außerhalb der Funktion darauf zugreifen (z.B. instance_number gibt immer 0 zurück).
Meine Vermutung ist, dass ich entweder den Wald vor lauter Bäumen nicht sehe oder das Objekt nur innerhalb der Funktion besteht und anschließend gleich wieder zerstört wird. (Ich vermute ersteres

So, ich hoffe, dass war jetzt nicht allzu verwirrend.
Der Herr gebe mir die Gelassenheit, die Dinge zu ertragen, die ich nicht ändern kann,
den Mut, die Dinge zu ändern, die ich ändern kann,
und die Weisheit, zwischen beiden zu unterscheiden.
den Mut, die Dinge zu ändern, die ich ändern kann,
und die Weisheit, zwischen beiden zu unterscheiden.