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

16.08.2009, 22:24

[Frage] Schüsse im Spiel

Hiho,
ich arbeit zur Zeit an nem kleinen Weltraumshooter. Jetzt hab ich mich gefragt wie ich das mit meinen Schüssen am besten umsetzen könnte. Ich hab ne Klasse CShot, was einen Schuss darstellen soll. Jetzt is meine Frage ganz einfach:
Soll ich jedes mal wenn ich bzw. ein Gegner schießt mit New CSchot(); bzw. delete CShot; einen neuen Schuss erzeugen, oder sollt ich mir ein Array von Schüssen zulegen und das einfach immer der Reihe nach durchgehen und schauen welcher Schuss grad frei ist?
Ich glaub die 1. Methode wäre einfacher, aber ich meine mal gehört zu haben, dass das den Speicher ziemlich fragmentiert. Außerdem frag ich mich aus Performancegründen ob das nich n bisschen langsamer werden könnte, wenn ich da ständig n neues Objekt erzeuge anstatt eins einfach zu "verschieben".

Naja dazu würd mich mal eure Meinung interessieren =)

MfG Killmichnich

2

16.08.2009, 22:35

Ich würde einen std::vector oder eine std::list nehmen.
Gut, objekte mit New zu erstellen mag vielleicht etwas langsamer sein, als ein vorhandenes, nicht gelöschtes, nicht benutztes Objekt mit neuen Werten weiter zu benutzen. Aber die Frage ist, ob das bei dir ins Gewicht fällt. Ich denke eher nein.
Also mach es dir bequem, das spart Zeit beim Programmieren und beim Fehlersuchen.
Lieber dumm fragen, als dumm bleiben!

3

16.08.2009, 22:49

Mach eine Klasse CShotManager, die die Schüsse "managed" (erstellt, zeichnet, gegen kolissionen prüft etc.), und CShot für die Schüsse
Dieser Post wurde aus artgerecht gehaltenen, 100% chlorfrei gebleichten, handelsüblichen Elektronen aus Freihaltung erzeugt.

killmichnich

unregistriert

4

17.08.2009, 09:14

@Jonathan_Klein: ab wievielen Schüssen/Sekunde (oder so) müsste ichs denn anders machen weils zu langweilig wird.

@Arrows: jo sowas in die Richtung hab ich auch geplant, thx ^^

5

17.08.2009, 12:11

schreibe doch eine Testapp, welche beides hintereinander macht. Dabei musst du einfach nur die Zeit messen und kannst vergleichen.

Das führst du mal mit 100 Objekten aus, dann mit 1.000, dann 10.000 usw.

Anschließend müsstest du es selber beurteilen können ob es so viele Objekte bei dir gibt und was sich für dich mehr lohnt.

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

6

17.08.2009, 12:26

Ich habe mal irgendwo gesehen, dass die Geschwindigkeitsunteschiede von std::vector und std::list erst irgendwo bei ein paar 100'000 bemerkbar sind. Weiss jetzt nicht mehr wo.
Aber selbst mal ausprobieren kannst du ja mal. ;)

killmichnich

unregistriert

7

17.08.2009, 13:12

naja ok 100 000 da bin ich zum glück weit entfernt ... aber nachdem was ich hier so hör wird es dann wohl recht egal sein ... ich geh mal davon aus dass ich höchsten 50-60 schüsse gleichzeitig auf dem schirm hab ^^

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

8

17.08.2009, 14:37

Das stimmt nicht ganz. Es kommt da echt auf den Verwendungsfall an, aber für kleine Anwendungen auf großen Rechnern ist das eher unrelevant.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Werbeanzeige