Vorgehensweise Aufbau/Strategie Spiel

0plan

Bekanntes Mitglied
Hi Leute.

Ich beschäftige mich gerade mit dem Spieleerstellen, da dies eigentlich mein Hauptgrund war, Java zu lernen. Ich hab ein Spiel das aus mehreren Klassen besteht, es ist ein Aufbau spiel also gibt es die Klasse Gebäude, Spieler und Gameframe usw.

Meine Frage ist, wie geht man vor, wenn man ein solches Aufbauspiel a la Age of Empires programmiert. Ich kann zwar alle Gebäude aus meinem Menü auswählen und auf das Panel zeichnen. Jedoch frage ich mich, wie ich es realisieren muss, das ich Gebäude auf dem Spielfeld anklicken kann. Da die Gebäude ja quasi Objekte sind die aus ein paar Werten und einem Image bestehen. Muss ich diese in JLabels auf den Panel zeichnen oder wie geht ihr da vor?
 
Das wird für gewöhnlich so gelöst, dass man die Position der Maus auf dem Bildschirm in eine Position in der Spielwelt umrechnet und dann eben das Spielobjekt anspricht, welches sich dort befindet.

Bei 2D Welten ist das noch relative simpel, bei 3D wird es ein wenig komplexer.
Kommt auch noch drauf an, wie genau das ganze sein soll und wie viele Funktionen deine Weltkamera hat.
Ist eine Zoomfunktion oder ähnliches vorhanden, wird die Mathematik dahinter nochmal ein wenig aufwendiger.

Es gibt afaik auch irgendwelche Methoden von OpenGL (und auch DirektX ?!) die das zu lösen zu versuchen.

Es gibt auch eine Technik, intern das Spiel zu zeichnen und jedem Objekt genau eine eindeutige Farbe zuzuordnen und dann zu schauen, welche Farbe bei den Koordinaten des Mauszeigers ist.

Richtige Spiele verwenden sicher nicht JLabel 😉
 
Nein, es ist ein einfaches 2d Spiel quasi Vogelperspektive ohne zoom und schnickschnack. Wird mein erstes Projekt, mit 3D hab ich noch nicht soooo viel Erfahrung sammeln können. Also ich habe eine Klasse die einen MouseListener implementiert um den erzeugten Objekten feste X und Y Werte auf dem Panel zuzuweisen. Ich soll also diese Objekte vorher in ein Label hauen, das Label dann an die X und Y Coords des Cursers platzieren?

Wenn ich die Grafiken bzw Objekte nicht in die Labels tun würde, wie würde mann dann vorgehen? Da die X und Y Position des Cursers ja nicht die gesamte Objektgrafik anspricht sondern nur die obere linke Ecke.
 
Im einfachsten Fall hast du ein Panel, auf dem du deine Objekte zeichnest.
Du überwachst nun Mausklicks auf dieses Panel.
Bei einem Klick schaust du nach, ob die Position eines Spielobjektes von diesem Klick getroffen wird.
Dafür brauchst du eine Liste mit deinen Spielobjekten und die Spielobjekte müssen wissen, ob wo sie sind und wie groß sie sind.
Wenn du keine Verschiebung der Ansicht hast, dann kannst du diese Position direkt in Pixelkoordinaten speichern und es ist keine Umrechnung erforderlich.
 
Ah okay, wenn ich das richtig verstanden hab, muss ich also den erzeugten Objekten auch die Image größe mitgeben anstatt nur die X und Y Coords, damit ich prüfen kann, ob der Curser auf dem Pixel liegt, welches von einem Objekt ebenfalls genutzt wird?
 
An dieser Stelle wäre Slick2D (OpenGL-2D-Game-Library quasi) zu empfehlen. Java2D stößt bei solchen Sachen schnell an die Grenzen...
 
Wie groß das Spielobjekt ist sollte so oder so unabhängig von der Grafik sein.
Die Grafik sollte sich an das Spielobjekt anpassen, nicht anders herum.

Nein externe Libs sind nicht notwendig.
Machbar ist es schon mit Java2D. Nur mehr als Bitmapgrafik ist eben nicht drinne ^^
 
Nimm OpenGL/Slick, dann hälst du dir die Möglichkeit offen, das Spiel zu vergrößern und außerdem ist Slick IMHO sogar einfach als Swing. Also warum nen Hut mit einem Hammer aufsetzen 😉
 
Musst eben aufpassen, dass die Grafik nicht zu klein ist 😉

Weil es dich unabhängiger macht von der Auflösung des Bildschirms, der Fenstergröße, etc..
 
vielen Dank, ich zieh mir gerade ein paar Tuts zu Slick rein, scheint ja echt easy zu sein. Vielen Dank für die Hilfe an alle.
 
btw, in dem Tut wird Slick mit MarteEngine genutzt, ist davon eher abzuraten oder taugt die was? Die mitgeliferten Klassen scheinen auf den ersten Blick echt einiges an Arbeit abzunehmen.
 
Bin schon etwas weiter, die Engine beitet einen eigenen Resourcemanager für sprites und media und hat unteranderem schon eine Entity Klasse von der man ableiten kann, also kann man sich das schon alles sparen. Echt genial.

Thread closed() Danke an alle
 

Zurück
Oben