Partikel: Vorspulen und Verschieben

  • GM 8

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Partikel: Vorspulen und Verschieben

    Hallo,
    wie kann ich ein Partikel-System vorspulen? In meinem Spiel verwende ich sie, um Galaxien, Sterne, Pulsare und ähnliche Dinge in den Hintergrund zu Zaubern, doch zu Anfang sind sie alle nur ein Punkt und durch ihre schleichende Geschwindigkeit sieht es auch ziemlich lange nach nichts aus. Drum meine erste Frage: Wie kann ich dieses System vorspulen?

    So eine Galaxie wird oft größer sein als mein view. Darum will ich es langsam im Hintergrund bewegen, damit es viel größer erscheint(Ich hoffe, ihr wisst was ich meine). Wenn ich das System irgendwie verschieben könnte, hätte ich das wohl noch hinbekommen aber wenn ich das object verschiebe (habe es mit x/y=mouse_x/y versucht) passiert gar nichts. Also: Wie kann ich das System verschieben? Und bewegen sich die Partikel mit?

    Ich freue mich schon auf eure Hilfe.

    Grüße, Skotchy.
    "Ich sollte schlafen gehen"

    ~Pika-Pika~
  • Bin mir nicht so ganz sicher ob du diese Methode anwenden solltest, also ob dies sinnvoll ist denn schließlich kannst du die Anfangs-Geschwindigkeit von Partikeln ja bestimmen.

    Aber schau dir mal diese beiden FUnktionen an, sollten das erledigen was du willst:

    GML-Quellcode

    1. part_system_position(ind,x,y) // setzt das gesamte System an eine neue Position
    2. part_system_update(ind) // simuliert einfach den nächsten step direkt beim AUfruf. In einer Schleife gepackt, kannst du damit vorspulen aber bedenke das dies performancelastig ist

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von DragonGamer ()

  • Das war ja überraschend einfach 8| .

    DragonGamer schrieb:

    aber bedenke das dies performancelastig ist
    Ich könnte einen Lade-Balken zu beginn des Spiels/der Runde einbauen, da alles nur einmal durchlaufen muss.
    Aber es ist ein neues Problem entstanden: Es entstehen zu viele Partikel.
    Ich wiederhole es so:

    GML-Quellcode

    1. repeat(){part_type_direction();
    2. part_emitter_burst();
    3. part_system_update();}

    Danke für die Hilfe.

    Grüße, Skotchy.
    "Ich sollte schlafen gehen"

    ~Pika-Pika~
  • Heh? Das Repeat-Statement benötigt eine Zahl!...
    Ein Ladebalken ist eine gute Idee.. aber. Wa sheisst denn zu viele Partikel? Hast du denn etwa auch selbst-emitierende Emitter (also per part_emitter_stream) aktiviert? Denn durch das Update werden in dem Fall auch die Partikel erstellt.

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • DragonGamer schrieb:

    Heh? Das Repeat-Statement benötigt eine Zahl!...
    In meinem Code ist alles ausgefüllt (siehe unten), ich wollte nur meinen Aufbau zeigen.

    DragonGamer schrieb:

    Hast du denn etwa auch selbst-emitierende Emitter (also per part_emitter_stream) aktiviert?
    Ne, nicht das ich wüsste. Ich habe so das Gefühl, dass ich irgendwo einen riesigen Denkfehler gemacht habe :S . Ich kann ja mal den Code Zeigen:
    Spoiler anzeigen

    :event_create: Create:

    GML-Quellcode

    1. i=0;
    2. alarm[0]=0;
    3. sys = part_system_create();
    4. part = part_type_create();
    5. part_system_depth(sys, 1);
    6. part_type_shape(part, pt_shape_pixel);
    7. part_type_size(part, 1, 3, 0, 0.01);
    8. part_type_alpha2(part, 1, 0);
    9. part_type_color3(part, c_white, c_blue, c_aqua);
    10. part_type_direction(part, 0, 360, 0.05, 0);
    11. part_type_speed(part, 0.00001, 0.0001, 0.00001, 0);
    12. part_type_life(part, 10000, 10000);
    13. emit = part_emitter_create(sys);
    14. part_emitter_region(sys, emit, x, x, y, y, ps_shape_ellipse, ps_distr_linear);
    Alles anzeigen


    :event_step: Step:

    GML-Quellcode

    1. if alarm[0]=-1 alarm[0]=4;
    2. if keyboard_check(ord('Q'))repeat(10000){ //Bei einem Ladebalken würde ich mit kleinen Zahlen wiederholen
    3. i = (i+360/7)mod 360;
    4. part_type_direction(part, i-10, i+10, 0.025, 0);
    5. part_emitter_burst(sys, emit, part, 1);
    6. part_system_update(sys);}


    :event_timer: Alarm 0:

    GML-Quellcode

    1. i = (i+360/7)mod 360;
    2. part_type_direction(part, i-10, i+10, 0.025, 0);
    3. part_emitter_burst(sys, emit, part, 1);


    Und weiterhin danke für die Hilfe.

    Grüße, Skotchy.
    "Ich sollte schlafen gehen"

    ~Pika-Pika~

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Skotchy () aus folgendem Grund: Ein Überbleibsel eines Experimentes entfernt.

  • Also.. an sich sieht das oke aus. Wo ich mir unsicher bin, ist die Stelle mit part_type_direction denn glaube nicht dass du damit jed einzelne Partikel-runde eine eigene Richtung geben kannst, sodnern nur dem Partikel-Typ an sich. Oder nicht?

    Vieleicht solltest du aber diesen Repeat-Teil nur ins create-event setzen und nicht mittendrin per Q-Taste aktivieren. Glaube aber eigentlich nciht dass dies etwas ausmacht...

    Wie genau istd enn der Unterschied zur Version mit und zur Version ohne "Vorspulen"?
    Versuch mal mit der part_particles_count(ind) Funktion, die Anzahl der Partikel zu vergleichen.

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • Mein Problem lag beim Alarm-Event. Ich wollte nicht jeden step einen Partikel haben, also habe ich das mit einem Alarm gelöst. Bei meinem Repeat-Teil habe ich dies aber erst einmal nicht berücksichtigt. Ohne Vorspulen hatte ich 2000 Partikel, mit hatte ich 10000: fünf mal zu viele. Also habe ich den Repeat-Teil etwas umgeschrieben und zwar von:

    GML-Quellcode

    1. part_emitter_burst(sys, emit, part, 1);
    zu:

    GML-Quellcode

    1. part_emitter_burst(sys, emit, part, -5);
    Jetzt funktioniert es, Danke :thumbsup: .

    Ich muss noch eine Menge über Partikel lernen ^^ .

    Grüße, Skotchy.
    "Ich sollte schlafen gehen"

    ~Pika-Pika~