hallo
hab mal wieder ein kleines Problem.
Ich versuche für mein Spiel ein Skript für Effekte zu machen.
Z.B soll das dann so aussehen das ich das Skript zum Beispiel beim treffer einer Kugel ausführe.
Die erzeugten partikel sollten ein größerer in der Mitte sein der sich nicht bewegt und weitere eins anderen Typs die sich in alle Richtungen bewegen.
Ich werde später im Spiel viele verschiedene Typen brauchen. D.h mit verschiedenen Farben, größen Wachstumsraten und anzahl der rezeugten sekündären partikeln und will darum nicht alle typen am Anfang des Spieles initialisieren.
Ich versuche mein Spiel sehr ressourceschonend zu machen und darum soll nur dann daer neue Typ partikel erzegt werden wenn dieser bisher nicht existiert.
Dazu erstellt das Skript eine variable aus den Argumenten des Partickels.
Dann wird überprüft ob es dieser partickeltyp bereits existiert. Wenn nicht wird dieser neu erzeugt.
Das Partikel-System wird schon woanders global initialisiert.
Hier der Skript:
Spoiler anzeigen
Alles anzeigen
das problem ist schwierig zu beschreiben.
Wenn ich es richtig erkenne werden 2 mal die gleichen partikel erstellt (des ersten Typs).
Der zweite wird garnicht erstellt.
Glaube das problem ist folgendes:
Der gamemaker verwendet für Partikeltypen zahlen.
Der erste Typ ist 0.
ich hab im spiel treat uninitialized variables as 0 eingestellt, somit wird wenn der wert aus partt2 erhalte werden soll 0 eingestellt weil die variable ja noch nicht existiert.
Aber er ist ja schon ein partikeltyp unter der variable 0 erstellt word. Nähmlich durch den ersten partikel typ.
Darum kommt bei part_type_exists(parttt2) true raus obwohl so ein partikel garnicht eingestellt wurde.
Darum wird der Code der das zweite partikel einstellen sollte übersprungen und es wird zweimal das selbe partikel durch die burst-funktion erstellt.
Was kann ich dagegen tun?
Danke schon mal sehr im Vorraus :):)
hab mal wieder ein kleines Problem.
Ich versuche für mein Spiel ein Skript für Effekte zu machen.
Z.B soll das dann so aussehen das ich das Skript zum Beispiel beim treffer einer Kugel ausführe.
Die erzeugten partikel sollten ein größerer in der Mitte sein der sich nicht bewegt und weitere eins anderen Typs die sich in alle Richtungen bewegen.
Ich werde später im Spiel viele verschiedene Typen brauchen. D.h mit verschiedenen Farben, größen Wachstumsraten und anzahl der rezeugten sekündären partikeln und will darum nicht alle typen am Anfang des Spieles initialisieren.
Ich versuche mein Spiel sehr ressourceschonend zu machen und darum soll nur dann daer neue Typ partikel erzegt werden wenn dieser bisher nicht existiert.
Dazu erstellt das Skript eine variable aus den Argumenten des Partickels.
Dann wird überprüft ob es dieser partickeltyp bereits existiert. Wenn nicht wird dieser neu erzeugt.
Das Partikel-System wird schon woanders global initialisiert.
Hier der Skript:
GML-Quellcode
- /*
- argument0 size of the main particle
- argument1 growing of it
- argument2 live time of it
- argument3 first color
- argument4 second color
- argument5 number of secondary particles
- argument6 size
- argument7 growing of secondary particles
- argument8 live time of it
- argument9 color of it
- */
- var partt, parttt, local_emit, partt2, parttt2, local_emit2;
- partt = 'v_'+string(argument0+argument1*100+argument2+argument3+argument4);
- parttt = variable_local_get(partt);
- if parttt = 0
- {
- variable_local_set(partt,part_type_create());
- parttt = variable_local_get(partt);
- execute_string("globalvar "+partt+";");
- part_type_shape(parttt,pt_shape_flare);
- part_type_alpha1(parttt,0.8);
- part_type_life(parttt,argument2-1,argument2+1);
- part_type_color2(parttt,argument3,argument4);
- part_type_size(parttt,argument0/100,argument0/100,argument1,0);
- }
- else parttt = variable_local_get(partt);
- local_emit = part_emitter_create(ef_part_sys);
- part_emitter_region(ef_part_sys,local_emit,x,x,y,y,ps_shape_line,ps_distr_linear);
- part_emitter_burst(ef_part_sys,local_emit,parttt,1);
- part_emitter_destroy(ef_part_sys,local_emit);
- if argument5 = 0 exit;
- partt2 = 'v_'+string(argument5+argument6+argument7*100+argument8+argument9);
- parttt2 = variable_local_get(partt2);
- if parttt2 = 0
- {
- variable_local_set(partt2,part_type_create());
- parttt2 = variable_local_get(partt2);
- execute_string("globalvar "+partt2+";");
- part_type_shape(parttt2,pt_shape_flare);
- part_type_alpha1(parttt2,0.7);
- part_type_life(parttt2,argument8-1,argument8+1);
- part_type_color2(parttt2,argument9,argument9);
- part_type_size(parttt2,argument6/30,argument6/30,argument7,0);
- part_type_direction(parttt2,0,360,0,0);
- part_type_speed(parttt2,2,3,-0.2,0);
- }
- else parttt2 = variable_local_get(partt2);
- local_emit2 = part_emitter_create(ef_part_sys);
- part_emitter_region(ef_part_sys,local_emit2,x,x,y,y,ps_shape_line,ps_distr_linear);
- part_emitter_burst(ef_part_sys,local_emit2,parttt2,argument5);
- part_emitter_destroy(ef_part_sys,local_emit2);
das problem ist schwierig zu beschreiben.
Wenn ich es richtig erkenne werden 2 mal die gleichen partikel erstellt (des ersten Typs).
Der zweite wird garnicht erstellt.
Glaube das problem ist folgendes:
Der gamemaker verwendet für Partikeltypen zahlen.
Der erste Typ ist 0.
ich hab im spiel treat uninitialized variables as 0 eingestellt, somit wird wenn der wert aus partt2 erhalte werden soll 0 eingestellt weil die variable ja noch nicht existiert.
Aber er ist ja schon ein partikeltyp unter der variable 0 erstellt word. Nähmlich durch den ersten partikel typ.
Darum kommt bei part_type_exists(parttt2) true raus obwohl so ein partikel garnicht eingestellt wurde.
Darum wird der Code der das zweite partikel einstellen sollte übersprungen und es wird zweimal das selbe partikel durch die burst-funktion erstellt.
Was kann ich dagegen tun?
Danke schon mal sehr im Vorraus :):)
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von DragonGamer ()