Game Maker 8.0 Performance

  • GM 8
  • Game Maker 8.0 Performance

    Hallo gm-d!

    Ich habe eine Frage:

    Was verschlechtert die Performance von Game Maker Spielen?

    Mir bekannt sind:
    - Zu viele Objekte
    - Draw Events
    - d3d
    - 39dll pakete senden und empfangen (z.B. im Step event)


    Und kann man die Performance verbessern, indem man 16-Bit einstellt und eventuell
    die Resulition (z.B. 640x480) ?

    Danke schonmal !
  • Nein, das bezweifle ich. Das Problem mit dem GameMaker ist die Tatsache dass die Skripte zur Laufzeit intepretiert werden müssen und nicht in reinen bytecode compiliert werden. Wenn du im Game Maker etwas drawst, fällt nur ein Teil der benötigten Zeit auf das eigentliche Ansprechen der Grafikkarte (falls diese für 2D überhaupt genuzt wird). Somit ringt es dir nur was wenn du weniger draw-Befehle verwendest.
    Grundsätzlich kommt mangelnde Performance aber nur vom coding. Die heutigen Rechner schaffen auch im GameMaker recht komplexe Spiele.

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • Das Problem ist, ich verzichte schon auf extrem viele Draw events und meinen Code habe ich auch schon schlanker gemacht und
    in eine ordentliche Reihenfolge geschrieben.

    Gibt es nicht noch mehr gründe?

    EDIT: Vieleicht die Raumgröße (mein raum ust 100 000 x 600 groß)
    Ich habe aber alle Objekte die nicht im view sind deaktiviert.
  • Precise collision masks sind auch tödlich. Pixelgenaue Kollissionsüberprüfungen sind einfach sehr teuer und bringen auch nur selten spürbare Vorteile. Besser immer die Standardformen (Rechteck, Kreis etc.) für die Masken verwenden.
    Einige meiner Spiele:
  • Precise collision masks sind auch tödlich. Pixelgenaue Kollissionsüberprüfungen sind einfach sehr teuer und bringen auch nur selten spürbare Vorteile. Besser immer die Standardformen (Rechteck, Kreis etc.) für die Masken verwenden.


    Danke :)
    Das wusste ich noch garnicht, und kann mir sogar weiter helfen :O
  • Tice schrieb:

    interceptor schrieb:

    Precise collision masks sind auch tödlich. Pixelgenaue Kollissionsüberprüfungen sind einfach sehr teuer und bringen auch nur selten spürbare Vorteile. Besser immer die Standardformen (Rechteck, Kreis etc.) für die Masken verwenden.

    Gibt es dazu Referenzen?

    Meinst du mit Referenzen Beweise? Dann mach doch einfach selber eine Testeihe und du wirst es sehen.

    Ein Raum von 100 000 * 600 ist schon ein bisschen extrem.
    Bezweifle allerdings dass dies wirklich das Spiel erheblich verlangsamt.

    Des weiteren sind die Funktionen execute_string genauso wie string() sehr langsam und sollten nur dann verwendet werden wenn sie wirklich unvermeidbar sind.

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

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

  • Öhm, wie deaktiviert man eigentlich Dinge die nicht im View sind?

    GML-Quellcode

    1. instance_deactivate_region(view_xview[0],view_yview[0],view_wview[0]+zahl1,view_hview[0]+zahl2,false,true);


    Dann gibt es noch:

    GML-Quellcode

    1. instance_activate_all();

    Aktiviert alle Objekte.

    GML-Quellcode

    1. instance_activate_object(Object)

    Aktiviert ein bestimmtes Objekt.

    GML-Quellcode

    1. instance_deactivate_object(Object)

    Deaktiviert ein bestimmtes Objekt.
  • Die execute_string Funktion wurde mit Studio inzwischen genauso gestrichen wie die Funktionen, mit denen man überprüfen konnte, ob Variablen existieren. Precise collision checking bei Sprites ist meines Wissens inzwischen auch schon standardmäßig deaktiviert.

    Mike Dailly (Head of Development, YoYoGames) hat vor einiger Zeit einen interessanten Blog-Beitrag über Kollissionen geschrieben. Den Originalartikel gibt es zwar nicht mehr, ich habe aber eine Kopie im Netz finden können: translated.by/you/collision-detection/original/

    Tatsächlich hat er mir das auch persönlich bestätigt, als ich YoYoGames letzten Monat in Schottland besucht habe. Pixelgenaue Kollisionen sind langsam.
    Einige meiner Spiele:
  • interceptor schrieb:


    Die execute_string Funktion wurde mit Studio inzwischen genauso gestrichen wie die Funktionen, mit denen man überprüfen konnte, ob Variablen existieren.

    Haben sie etwa auch die object_event_add(ind,evtype,evnumb,codestr) Funktionen entfernt?
    Ja, sowas zu benutzen gehört zum "schlechten Stil". Allerdings ist dies einer der wenigen Vorteile den der GM gegenüber kompilierter Programmiersprachen hat.

    interceptor schrieb:


    Tatsächlich hat er mir das auch persönlich bestätigt, als ich YoYoGames letzten Monat in Schottland besucht habe. Pixelgenaue Kollisionen sind langsam.

    Dann sollten sie endlich triangle kollisionen einführen. Damit kann man fast pixelgenaue Kollisionen mit relativ geringem Aufwand berechnen, soweit ich weis.

    Nico001 schrieb:


    Kann man die Performance verbessern, indem man im Taskmanager unter Prozesse die Priorität
    höher stellt ?

    Bezweifle dass dies viel bringt, aber du kannst es ja versuchen. Man braucht dazu auch nichtden Taskmanager. Sieh dir die Funktion set_program_priority(priority) an.

    Was für eine Leistung hat denn eig. dein Computer?

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

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

  • Nico001 schrieb:

    Mein Computer hat 8GB Ram und eine 2GB Nvidia GT 540M Graka.
    Ich habe keine Probleme mit der Performance von meinem Spiel (50-60 FPS)
    Aber ein paar andere Leute haben nur 10-25 FPS.

    Hm.. glaube so kommen wir nicht weiter.
    Es wäre hilfreich wenn du das Spiel als projektdatei zur verfügung stellen würdest.
    Dann könnte jemand vieleicht rausfinden woran es liegt.

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

    Habe ich auch schon überlegt .. will ich aber nicht.
    ^^


    Verständlich.

    Du kannst ja versuchen zwei kleine Skripte zu schreiben:
    start_time()
    und show_time()
    Um dir die Arbeit zu erleichtern. Das erste sollte die aktuelle zeit in eine Variable speeichern und die zweite einafch die Differenz zwischen den Zeiten (schau in der Hilfe nach für solche Funktionen).
    Damit kannst du dann auf simple Weise messen wie viele Millisekunden die einzelnen Code-abschnitte brauchen.

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

    2 Besucher