Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

killmichnich

unregistriert

1

05.08.2009, 17:30

frage nach der effizienz

Hiho,
ich hab da ml ne kleine Frage:
Ich arbeite zur Zeit an einem kleinen Weltraumshooter bei dem man eben durch den Weltraum fliegt und Gegner abschießen soll. Jetzt bin ich auf der Suche nach ner möglichst effizienten Suche die Kollision zwischen Schüssen und Gegnern durchzugehen. Weil meine Gegner ja nicht immer auf dem Bildschirm sichtbar sehen hab ich für die ne Variable eingefüggt ob sie verfügbar sind oder nicht, und anhand der zeichne ich sie z.B. oder eben nicht.
Jetzt brauch ich ja quasi zwei for-Schleifen, einmal für meine Gegner und einmal für meine Schüsse. Bis jetzt hab ich das ganze so gemacht, dass wenn mein Gegner bzw. Schuss nich gezeichnet wird ich einfach continue mach. Jetzt hab ich mir aber auch überlegt, dass ichs ja so machen könnte, dass ich alle Gegner und Schüsse die gezeichnet werden in ein extra array speichern könnte und dann nur das überprüfen müsste. Ich müsste halt alle paar Sekunden dieses Array wieder aktualisieren.
Und jetzt ist meine Frage ob das denn so Sinn machen würde, ob mein Program dadurch schneller/langsamer werden würde und was ihr so davon haltet was besser ist =)

Freu mich immer über Antworten =)

MfG Killmichnich

xardias

Community-Fossil

Beiträge: 2 731

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

2

05.08.2009, 17:35

Ich denke nicht, dass du dadurch viel, wenn überhaupt was gewinnen würdest.

Jedoch kann es für den Spieler durchaus ärgerlich sein, wenn er einen Gegner der außerhallb des Bildschirms ist nicht treffen kann. Was ist wenn sich Gegner und Schuss so bewegen, dass sie sich treffen würden, im letzten Moment aber vom Bildschirm verschwinden?

PS: Premature optimization is the root of all evil.

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

3

05.08.2009, 21:36

wenn du schon otpimieren willst dann mach das sinnvoll^^ das ist wie xardias schon sagt dann der fall wenn du performacneprobleme hast oder auf adneren rechnern auftreten.

als optimierung käme sektorisierung in frage: du teilst den feld in gleichmäßige sektoren ein. und jedes obekt, was zum kollidieren fähig ist wird einen sektor eingeordnet. und dann fidnen kollisionen nur innerhalb eines sektors statt. dadurch kannst du bei EXTREM viel geballer was rausholen. halt messen und schauen wie mans verbessern kann!

Das Gurke

Community-Fossil

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

4

08.08.2009, 10:51

Ich würde jede Optimierung hier erstmal bleiben lassen und stattdessen auf mehr Profiling setzen. In meinem aktuellen Projekt habe ich mir in etwa folgende Debugausgabe zusammengebastelt:

Quellcode

1
2
3
4
5
AI: 2 ms
Collision: 3 ms
Plugins: 8 ms
Drawing: 18 ms
~ 32 FPS


Daran kann man recht gut erkennen, an welchen Ecken sich Optimierungen etc noch lohnen würden und der Aufwand ist recht gering. In meinem Fall würde sich eine Optimierung der Drawing Phase vermutlich wesentlich mehr lohnen.

Werbeanzeige