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

XoR

Frischling

  • »XoR« ist der Autor dieses Themas
  • Private Nachricht senden

1

31.10.2012, 18:06

Fragen zur Umsetzung eines TD

Guten Tag allerseits.

Nachdem ich meine erste App fertig gestellt habe und ich ein großer Fan von TowerDefense-Games bin, wollte ich mich nun selbst an eines wagen.
Bei der Planung im Voraus, um ein einigermaßen strukturiertes Programmieren zu ermöglichen, bin ich auf ein paar Probleme bezüglich der Umsetzung gestoßen.
Obwohl eigentlich nur eine Frage pro Thema erlaubt ist, dachte ich mir dass es in diesem Fall wohl besser wäre, nicht für jede Frage einen eigenen Thread zu eröffnen.
Da einige Fragen schwer zum Vorstellen und/oder beschreiben sind, bin ich so frei diese mittels (einfach gehaltenen) Bildern anschaulich dar zu stellen.
So, nun zum Eigentlichen:



Problem/Frage 1:

Ich denke allen ist bekannt, dass bei einem TD Gegner auf einem vorgegebenen Weg laufen, an dessen Rändern Türme stehen.
Ich habe nun das Problem, dass ich es bewerkstelligen muss, dass alle Türme und Gegner korrekt von einander verdeckt werden.

Ich hoffe diese einfachen Bilder verdeutlichen was ich meine:
braun: Weg
grau: Turm
rot: Gegner

Bild1(richtig) und Bild2(falsch)

Um dieses Problem zu beheben, dachte ich mir, dass ich für die jeweilige Position(oberhalb/unterhalb des Weges, oder auf dem Weg) der Objekte verschiedene Schichten(FrameLayouts in Android) verwende, welche ich dann über einander lege. Mann kann es sich vorstellen wie Klarsichtfolien die übereinander gelegt werden: Die Zeichnungen(Elemente) auf der Mittleren verdecken die der untersten, und die Elemente der Obersten verdecken die der untersten und mittleren. Somit werde ich die Türme die oberhalb des Weges sind auf die unterste Ebene "zeichnen", die Monster auf die mittlere und die Türme unterhalb des Weges auf die oberste Ebene. Daraus folgt, dass die Monster die Türme oberhalb verdecken (Wie im Bild1 zu sehen) und die Türme unterhalb des Weges die Monster verdecken würden.
Zur veranschaulichung.

Soweit so gut, doch was ist Wenn die Map so aussieht: Map
Dann wäre der Turm einerseits unterhalb des Weges, andererseits aber auch oberhalb. Somit fällt meine Lösung ins wasser, da es sonst so aussieht und nicht so , wie es richtig gehört.
Nun brauche ich eure Hilfe, denn ich weiß nicht, wie ich das richtig lösen soll.


Problem/Frage 2:

Für gewöhnlich schießen die Türme auf die Monster und manche schießen wie eine Steinschleuder(im Bogen). Bevor ich nun alles schriftlich erkläre, lasse ich lieber wieder meine hochwertigen *g* Bilder für sich sprechen:
Frame1 - Frame2 - Frame3 - Frame4 - Frame5 - Frame6
Ich denke ihr seht, worauf ich hinaus will. Der Turm schießt sein Geschoss ab, welches die vorher vom Turm berechnete "Schussparabel" abfliegt, doch das Problem ist, so denke ich, dass sich das Monster wärend das Geschoss fliegt, sich weiterbewegt und somit wo anderst ist, als das Geschoss wenn es einschlägt. Ich müsste also eigentlich schon vorher wissen, wo sich das Monster befindet, wenn das Geschoss einschlägt. Ist diese Überlegung richtig?
Zudem, wie verhält es sich mit Geschossen, die keine Schussparabel abfliegen, sondern direkt auf den Gegner zufliegen? Müsste man für diese Art von Geschossen meinen speziellen Freund namens Wegfindung(zudem wir anschließend kommen) wieder einsetzen?



Problem/Frage 3:

Ich weiß ich habe bereits einen Thread bezüglich Wegfindung vor einiger Zeit erstellt, doch ich würde hier gerne alle meine Probleme/Fragen über TowerDefense-Games sammeln, zudem habe ich noch weitere Fragen zur Wegfindung.

3.1 Selektierung
Wie in meinem alten Thread beschrieben würde ich gerne erfahren, wie die einzelnen Felder, in die ich die Map einteile, mit begehbar oder nicht begehbar gesetzt werden.
Mein erster Ansatz wäre gewesen, dass ich, insofern der Weg auf dem die Monster laufen gleichfarbig ist, die Farbe jedes Feldes überprüfe und falls dieses Feld der Farbe des Weges entspricht, ich es als begehbar definiere.
Doch mir stellt sich die Vermutung in den Weg, dass dieses Überprüfen der Farbe extrem viel Rechenzeit in anspruch nimmt, und somit dieses Verfahren ausscheidet. Zudem, wie wird es realisiert, falls der Weg keine einheitliche Farbe besitzt?
Per Hand die Felder zu setzen scheidet auch aus, denn ein zweidimensionales Array mit ca. 100x100 Feldern per Hand zu selektieren - puuuh, das wäre schon seeeeehr viel Arbeit.
Ich wäre euch also zu Dank verpflichtet, wenn mir einer des Rätsels Lösung sagen könnte und das in möglichst einfachen Worten :)

3.2 Koordinaten der Felder
Jedes Monster auf dem Spielfeld hat eine eindeutige x-/ und y-Koordinate. Wenn der zu gehende Weg eines Monsters berechnet wurde, welche Zielkoordinate lege ich dann als Zielpunkt fest? Ein Feld beeinhaltet ja schließlich mehrere Pixel. Gehen wir von 5x5Pixel pro Feld aus und sagen dass Feld123 das nächste Zielfeld unseres Monsters ist. Welchen Pixel von Feld123 gebe ich dann als Zielpixel bzw. Zielkoordinate für mein Monster an?

3.2.1 Bewegung des Monsters
Gehen wir davon aus, dass 3.2 geklärt wäre, und ich nun eine eindeutige x-/ und y-Koordinate als Zielpunkt habe. Legen wir den Zielpunkt auf (14|20) fest und den momentanen Punkt des Monsters auf (0|0). Wie berechne ich nun den Weg pro Frame den das Monster zurücklegt.
Wäre der Weg nur auf der Horizontalen zu bewerkstelligen(Ziel (10|0), Momentan(0|0)), so bräuchte ich nur den x-Wert jedes Frame erhöhen, bis die 10 erreicht wäre. Doch wenn der Weg wie im Beispiel oben diagonal ist, wie berechne ich dann den Weg so, dass ein schöner diagonaler Weg entsteht?



Ich hoffe ich konnte meine Fragen so stellen, dass sie jeder einigermaßen kapiert :D
Zudem hoffe ich, dass meine Fragen nicht allzu dämlich sind und ich mich nicht auf die Knochen blamiere.

Wie immer hoffe ich auf schnelle Antwort, und ein Dankeschön schon mal im Voraus!


MfG XoR

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

31.10.2012, 18:25

1) Offenbar musst du sortieren und von hinten nach vorne rendern

2) Viele Tower-Defense-Games vernachlässigen die Flugdauer und ändern die Flugbahn eines Parabel-Geschosses nicht. Linieare Schüsse ändern lediglich den Zielpunkt. Wenn diese also von Start zum Ziel interpoliert werden und der "Strahl" bei jedem Frame in eine andere Richtung zeigt, gibt es da kein Problem. Pathfinding ist überflüssig.

3.1) Mach das Raster gröber und gibt jedem Tile die Info, ob es begehbar ist oder nicht. Fertig. Keine Farb-Checks, nix.

3.2) Mittelpunk? Ist auch völlig egal eigentlich, sie folgen einem Pfad, keinem echten Zielpunkt.

3.2.1) Geschwindigkeitsvektoren.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

XoR

Frischling

  • »XoR« ist der Autor dieses Themas
  • Private Nachricht senden

3

31.10.2012, 19:11

3.1) Wenn ich das Raster gröber mache, dann wird es doch irgentwann ziemlich ungenau, oder ist das nicht so großartig ausschlaggebend?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

31.10.2012, 19:17

Nein, ist es nicht. Ich weiß ja nicht wie groß Deine Level sein sollen, aber für ein Mobile-Game vermutlich nicht so groß, dass es über mehr als 20²-30² hinausgehend noch sinnvoll wäre.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

XoR

Frischling

  • »XoR« ist der Autor dieses Themas
  • Private Nachricht senden

5

01.11.2012, 02:08

Wie sieht das eigentlich aus, wenn ich ein Zoomfunktion einbaue? Dann würde sich doch das Raster verschieben oder?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

01.11.2012, 06:35

Durchaus, ja. Aber da es sich dabei um lineare Verschiebung und Skalierung handelt, dürfte das wohl das geringste Problem sein. Wenn nicht, dann hast du mathematische Grundlagen nachzuholen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

XoR

Frischling

  • »XoR« ist der Autor dieses Themas
  • Private Nachricht senden

7

04.11.2012, 21:23

Wiedermal ne blöde Frage, aber was macht man denn bei so einer Einteilung ?
Werden auch Tiles, die nur teilweise mit dem Weg übereinstimmen als begehbar definiert?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

8

04.11.2012, 21:31

Es gibt da wie gesagt dutzende Möglichkeiten. Du kannst ja auch Pfade, sprich einen Graphen definieren, und die Tiles komplett aus der Wegfindung rauslassen. Würde bei so etwas sicher sinnvoller.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige