Performance mit vielen Objekten

  • GM 6

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

  • Performance mit vielen Objekten

    Hallo.
    Ich habe eine kleine Performance-Frage:
    Wenn ich einen großen Raum habe (echt groß) und darin viele Objekte (wirklich viele Objekte) und die haben alle ANimationen und Code und Überprüfungen ohne Ende und auch Effekte, Blend Modes usw. und müssen auch außerhalb des Views funktionieren (z.B. Pflanzen wachsen).
    Wie kann man bei sowas noch gute Performance erreichen?

    Magical dream time!
  • Es hätte ja sein können, dass jemand irgendwelche Tipps oder Möglichkeiten weiß.
    Aber scheinbar muss ich wohl selber gucken, wie ich das hinkriege.
    danke

    Magical dream time!
  • Für sowas gib es keine generelle Antwort. Das ist stark abhängigi vom Umfang und Qualität des codes in den Objekten. Ein sehr einfaches Problem, kann durch einen sehr umständlichen code viel "Performance" verbrennen. Der code in den Objekten sollte also stark optimiert sein. So sollten berechnende Abfragen (entfernungen, kollisionen, etc.) einmal abgefragt und als zustandsänderungen gespeichert werden, damit man sie z.b. im step event und im draw event verwenden kann.

    Weiterhin sollten derzeit nicht relevante events nicht verwendet werden. So kann man den draw event umgehen, indem man das object temporär auf unsichtbar (visible=0) stellt. So werden die anderen Events (step, kollision) nicht beeinträchtigt, aber es werden keine Berechnungen und kein Grafikspeicher für die optische darstellung verbraucht.

    Eine weitere Möglichkeit ist teile des step events auf alarme zu verschieben. eine pflanze muss z.B. nicht jeden step wachsen. Es reicht vielleicht, wenn sie alle 5 sekunden ein bischen wächst (bei 30 fps, 5 * 30 = alarmzeit). Man sollte aber darauf achten, das nicht alle Pflanzen gleichzeitig wachsen. Das könnte alle 5 Sekunden zu Einbrüchen führen. Dies könnte man z.B. dadurch umgehen, das die pflanzen den alarm mit 1+ceil(random(30)) beginnen. Dadurch "wachsen" die Pflanzen meistens in unter schiedlichen steps.

    Eine weitere Möglichkeit "performance" zu sparen ist, einen event nicht von den objecten selber, sondern von einem "steuerungs objekt" ausführen zu lassen. So kann z.B. die Steuerung von 1000 objekten mit den befehlen "with" und/oder der Verwendung von Parents mit nur einer Event-Abfrage ermöglicht werden.

    Wie du siehst gibt es nicht eine, sondern viele Möglichkeiten. Ich habe auch nur die aufgezählt, die mir spontan eingefallen sind. Das wichtigste ist, sich zu überlegen, was man genau tun will, und dies möglicht gut geplant und nachvollziehbar umzusetzen.
    Battle Command - WeltraumEchtzeitStrategie | Meine GM Spiele auf Box.net
    GCM/FA/O d-(--)@>---xpu s-:- !a C++$@ U- P L+ E W++ N o K-- w++ O? M V PS PE-- Y PGP t 5 X R+++ tv+ b DI D G e+ h? r-- x
  • also mein motto ist wenig ist mehr;

    wenn man performance rausholen will sollte man mit möglichst kleinen formeln arbeiten da der code der im step
    ist komplett gelesen wird sollteman bsp eine große while/do/for-schleife immer ausserhalb des normalen steps haben(Da gingen Alarme oder Scripts)


    ausserdem kann man sich auch eine art eigenes objekt machen bsp: bullet objekte da diese massig erzeugt werden ist es besser ein control objekt für sowas zu machen der die bewegung der bullets kontrolliert(das heisst soviel wie das dieses objekt die bullets position neu errechnet und diese daraufhin drawt)
    (das prinzip kann man auch auf pflanzen übertragen)

    bei pflanzen wachsen würd ich WIN's tipps in die tat umsetzten (@WIN: moah das mitm visible auf 0 setzten merk ich mir thx xD)

    kleinere bilder wären auch nee gute lösung oder auch die bits runtersetzten soll soweit ich weiß die perfo erhöhen

    so und mein letzter tipp wäre noch das man die generellen eingaben in den step und nicht in den draw reinsetzt ich weiß nicht obs zufall ist aber wenn mein code im step is wird das spiel ein paar prozenstel schneller... kann auch nur meine imagination sein xD
  • Benutzer online 1

    1 Besucher