Partikelsystem - Zeit Variable

  • GM 7

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

  • Partikelsystem - Zeit Variable

    Hallo Leute.
    Ich habe, nachdem es in Soul Reavers und meinem Projekt ein Problem mit dem Partikelsystem gibt mich mal drangesetzt und etwas Versucht. Da wir ein fpsunabhängiges system haben müssen wir natürlich geschwindigkeit etc mithilfe einer variablen anpassen. In meinem Testsystem funktioniert das so:

    GML-Quellcode

    1. time=30/fps

    das heißt bei einer Framrate von 30 ist die variable time=1 und nun werden eben alle variablen die speed usw anbelangen mit dieser variable multipliziert. Das funktioniert auch überall nur nicht beim Partikelsystem. Wenn ich zb von einer Framerate von 100fps ausgehe und nehmen wir an im spiel fällt sie dann auf 30, sind die partikel alle viel schneller als es eigentlich sein sollte.
    Ist das PArtikelsystem zu empfindlich für sowas oder muss ich was spezielles beachten?
    Ich weiß schon dass ich dann die Partikeleinstellungen refreshen muss.

    EDIT: Im Projekt siehts so aus. global.deltatime ist hier die Variable für das oben genannte, die Abfrage auf argument0 is einfach nur obs refresht wird oder neu erstellt.

    GML-Quellcode

    1. if (argument0=0){
    2. global.p_shell=part_type_create()
    3. part_type_sprite(global.p_shell,global.sprite_shell,0,0,1)
    4. part_type_alpha3(global.p_shell,1,1,0)
    5. part_type_orientation(global.p_shell,0,360,0,0,1)
    6. part_type_size(global.p_shell,0.2,0.2,0,0)}
    7. part_type_life(global.p_shell,500*(1/global.deltatime),550*(1/global.deltatime))
    8. part_type_speed(global.p_shell,4*global.deltatime,7*global.deltatime,-0.2*global.deltatime,0)

    © 2008 by Teamgrill Productions

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

  • Nur nebenbei: Die fps können auch mal auf 0 sinken, dann haste ein Problem.
    Zu deiner Frage: Du kannst das automatische Aktualisieren der Partikel deaktivieren und das selbst in die Hand nehmen:
    part_system_automatic_update(ind,automatic) Gibt an ob der Partikeltyp automatisch (1) oder manuell (0) aktualisiert wird. Standart ist 1.
    part_system_update(ind) Diese Funktion aktualisier alle Partikel des Systemes und löst die Emitter aus. Du musst dies nur ausführen wenn nicht automatisch aktualisiert wird. (Auch wenns manchmal nützlich ist dies ein paar mal aufzurufen um Schwung in das System zu kommen.)
  • Naja eigentlich net da es dann ja im nächsten Step gleich wieder aktualisiert wird.
    Aber bei deinem Voraschlag is dann das Problem dass es ein Ruckeln ergebn würde und es kann ja auch nicht sein, dass es so schwer ist das Partikelsystem mit einer Zeitvar anzupassen.

    © 2008 by Teamgrill Productions
  • Hier mein Vorschlag besser ausvormuliert:
    Du stellst die Werte so ein, dass auf einen Step z.B. 2 Partikelsystem-Updates kommen. Dann hast du eine Variable, die du jeden Step um (wenn ich nicht falsch liege) 2*global.deltatime erhöhst und dann machst du folgendes:

    GML-Quellcode

    1. while (part_update>=1) { part_update -= 1; part_system_update(part_sys); }
    ( Funktioniert zumindest in meinem Kopf ^^ )