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

1

04.07.2012, 15:51

Einheiten programmieren

Hallo zusammen,



ich überlege derzeit wie ich einem Spiel Einheiten programmieren kann. Das sollte so in etwa funktionieren wie man es aus Strategiespielen kennt wie beispielsweise Warcraft.

Es wäre da wohl am sinnvollsten für jede Einheit eine Klasse anzulegen in welcher dann so sachen wie max. Leben, aktuelle Leben, Aussehen(verwendetes Spritesheet), etc. drin stehen.

Für die Einheiten eines Spielers wäre dann wohl ein Array dieser Klasse sinnvoll.

Jedoch wäre es am sinnvollsten erst beim Ausbilden einer Einheit ein Teil dieses Arrays hinzuzufügen.
Wie wäre die Verwaltung der Einheiten denn am sinnvollsten? Ein Pointerarray erstellen und dann beim Ausbilden der Einheit ein neues Objekt der Klasse auf dem Heapspeicher zu erstellen und den Pointer dazu im Array ablegen? Das Pointerarray müsste dann so groß wie das Einheitenlimit sein.



Hat mir da vielleicht jemand ein paar Denkanstöße, Links oder Links zu einem Tutorial etc.? Ich habe bereits ein wenig gegoogelt bisher aber erfolglos.



MfG Pat711

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

2

04.07.2012, 15:57

Von der Idee für Einheit eine Klasse zu erstellen würde ich mich wieder verabschieden. Mir fällt grad der Fachbegriff nicht ein, aber ich denk mal der wird von andern dann freundlicherweise nachgereicht :)

Und zwar solltest du die Einheiten aus vorgefertigten 'Komponenten' zusammensetzen, welche spezielle Fähigkeiten haben. Zum Beispiel eine Komponente für die Bewegung, eine andere für das Angreifen, eine für das Bauen, etc. Dann kannst du dir deine Einheiten einfach aus den Komponenten zusammenbauen und endest nicht mit tausend Klassen, die alle das selbe machen.

Zum Speichern würde ich dann eine List oder ein dynamisches Array benutzen, anstatt eines statischen Arrays.
Auch würde ich da nicht für jeden Typ ein eigenes Array benutzen, sondern eins pro Spieler.

babelfish

Alter Hase

Beiträge: 1 222

Wohnort: Schweiz

Beruf: Informatiker

  • Private Nachricht senden

3

04.07.2012, 16:08

Aus Performancegründen kann es sein, dass du die Einheiten anders verwalten musst.

z.B. für Flächeneffekte, Auswählen von Gruppen, Pathfinding, Kollision etc. wäre es doch praktisch wenn die Einheiten anders angeordnet werden.

Saik0

Treue Seele

Beiträge: 171

Beruf: Anwendungsentwickler

  • Private Nachricht senden

4

04.07.2012, 16:37

Von der Idee für Einheit eine Klasse zu erstellen würde ich mich wieder verabschieden. Mir fällt grad der Fachbegriff nicht ein, aber ich denk mal der wird von andern dann freundlicherweise nachgereicht

Du meinst das Entity-System ^^

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

5

04.07.2012, 19:21

Ich habe vorgestern eine Klasse geschrieben, die es ermöglicht mehrere Aufgaben zu einer zusammenzusetzen und diese hintereinander ausführt.
So kannst du z.B. der Einheit sagen, sie soll sich zur Position x|y bewegen, 5 Sekunden warten, einen Feind töten, Rohstoffe abholen, zum Gebäude gehen und es bauen usw. ohne, dass die Einheit die Aufgaben direkt kennen muss.
Ich habs mal bei Pastebin eingefügt: http://pastebin.com/6xt0MZNQ
Kannst dich ja inspirieren lassen.

Bedenke aber, dass die Klasse nur zwei Tage alt ist und noch nicht ausgiebig getestet und Dokumentiert wurde. Ich hoffe, dass es dir trotzdem helfen wird.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

6

05.07.2012, 15:01

Vielen Dank mal ich werde mich dann mal mit den Ideen auseinandersetzen und mich dann vll nochmal melden ;-)

7

06.07.2012, 08:58

Ich benutze auch ein Entity-Sytem (wenn man es denn so nennen will), d.h. alle Objekte sind aus vielen Kleinen Komponenten zusammengebaut. Beide WC3 gibt es ja auch diese laufenden Baumhäuser, so etwas ist damit z.B. kein Problem, dein Objekt bekommt halt eine Gebäude und eine Einheiten Komponente.
Damit kann man sehr einfach sehr verschiedene Entitys bauen. Natürlich hat das ganze auch seinen Preis, man hat sehr viele teilweise echt kleine Klassen, man hat einiges an Code für die ganze Componentenverwaltung, Wechselwirkungen zwischen den Komponenten (ich benutze dafür dann ein Event System) usw.
Wenn du von vornherein weißt, dass es nur 5 Einheiten geben wird, kannst du wesentlich effizienter programmieren, wenn du jedes Objekt einzeln behandelst.
Ich verfolge zum Beispiel den Ansatz, das jedes Objekt individuell ist, d.h. ich werde eher wenige, dafür aber komplexe Objekte haben. Daher würde ich Beispielsweise auch die Angriffskraft für jedes Objekt extra speichern, da in der Theorie alle verschieden sind. In einem Spiel wie Total War hat man tausende identische Einheiten, würde man das natürlich berücksichtigen und so Gemeinsamkeiten nur einmal speichern, alleine um Speicher zu sparen.
Lieber dumm fragen, als dumm bleiben!

Werbeanzeige