Du bist nicht angemeldet.

Werbeanzeige

1

19.08.2018, 17:31

Einheiten Manager

Hallo (mal wieder),

ich sitze seit geraumer Zeit an meinem Spritemanager und speziell der Kollision. Nun ich möchte im Grunde genommen nur, dass wenn zwei Einheiten sich zurselben Zeit bewegen bzw mehrere Einheiten zu einem Zielort laufen,diese NICHT ineienander laufen können, sondern klar voneinander getrennt in meinem Fall genau in einem Abstand von einem Tile stehen bleiben.


Bisher funktioniert nur das setzen der betretenden Felder als Obstacle und desweiteren werden diese auch aktualisiert zur Laufzeit, soll heißen,dass jede Einheit weiss wo die andere steht und ausweichen kann, aber eben nur wenn sich nur eine Einheit bewegt.

Ach ja eh ichs vergess, ich möchte dieses klar definierte militärische "Tile begehen" auf einem Isometrischen Grid. Also alle Einheiten bewegen sich Gridabhängig.

Sprache ist Java.

Wäre für Hilfe dankbar. :)

Schorsch

Supermoderator

Beiträge: 5 149

Wohnort: Wickede

Beruf: Student

  • Private Nachricht senden

2

20.08.2018, 11:26

Eine Einheit könnte das folgende Tile als belegt markieren bevor sie es betritt. Wenn nun eine weitere Einheit ein belegtes Feld betreten möchte könnte das einerseits abgewiesen werden, oder es wird neu verhandelt welche der beiden Einheiten das Feld als Ziel bekommt.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

3

20.08.2018, 13:06

Danke für den Vorschlag.

Ich habe ja schon einmal hier ungefähr dasselbe gefragt. Kann mir vielleicht jemand ein Stichwort (bitte nicht KI , denn das ist zu umfangreich) nennen, anhand dessen diese Art von Problematik erläutert wird ? Mein Thema heißt ja Einheiten Manager. Oder ist das im Grunde genommen nur eine Kollisionserkennung?


Im Moment kann man sich meine Einheitenbewegung wie im allerersten Starcraft vorstellen, nur dass bei mir bei jedem Betreten eines neuen Tiles die erste Einheit dorthin geht, stoppt, auf die andere Einheit wartet, dann stoppt diese wieder usw. .

Wenn ich beispielsweise 4 Einheiten markiere und zu einem Zielpunkt laufen lasse, belegen z.B. zwei Einheiten am Zielort ein Feld.

Ich tüftel erstmal weiter... aber ein Tutorial o.Ä. wäre hilfreich falls jemand soetwas kennt.

Und nochetwas: Ist es auch möglich die Kollisionserkennung anhand von Rechtecken zu ermitteln und dann halt mittels intersects die Kollision zu bestimmen ? Oder ist das ineffektiv?

Gruß Javaist

4

20.08.2018, 13:33

Ich bin mir nicht sicher, ob es das passende ist, aber such mal nach "KI Schwarmverhalten". Das sollte in etwa deine Probleme abdecken.
Indie Game-Dev Programmierer beim 2D MMORPG Pentaquin | Pentaquin Foren Vorstellung

Schorsch

Supermoderator

Beiträge: 5 149

Wohnort: Wickede

Beruf: Student

  • Private Nachricht senden

5

20.08.2018, 15:26

Und nochetwas: Ist es auch möglich die Kollisionserkennung anhand von Rechtecken zu ermitteln und dann halt mittels intersects die Kollision zu bestimmen ? Oder ist das ineffektiv?

Klar ist das möglich aber solange deine Einheiten immer nur feste Kacheln verdecken geht das doch viel einfacher. Du merkst dir zu jeder Kachel ob und von wem sie belegt ist. Soll sich eine Einheit weiter bewegen musst du nur vorher prüfen ob das Ziel bereits belegt wurde. Ich wüsste jetzt auch nicht was man da noch groß an Stichworten zur Recherche geben könnte. Möglicherweise verstehe ich dein Problem aber auch falsch. Kannst du das ganze mal skizzieren?
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

6

20.08.2018, 20:27

Alles gut, du verstehst mich schon richtig, ich habs auch schon vorher einigermaßen gewusst nur geht das konkrete implementieren halt nicht.

Will heißen:

Einheit stellt fest vor mir ist der nächste Knoten des Pfades ich lauf da hin währenddessen wird der der neu zu betretende Knoten als obstacle markiert. Nun müsste ich ja den Knoten bzw das soeben verlassene Tile wieder auf false setzen usw. .Und das eben in alle acht Richtungen nur das war mir schon vor meiner frage recht eingängig, aber es geht halt nicht.

Also ich denke du weisst was ich meine aber ich möchte hier nicht den Code posten und beherzige deine Vorschläge und melde mich dann wieder hier.

Schorsch

Supermoderator

Beiträge: 5 149

Wohnort: Wickede

Beruf: Student

  • Private Nachricht senden

7

22.08.2018, 15:07

Nun müsste ich ja den Knoten bzw das soeben verlassene Tile wieder auf false setzen usw. .Und das eben in alle acht Richtungen nur das war mir schon vor meiner frage recht eingängig, aber es geht halt nicht.

Warum geht das nicht? Sobald die Einheit die Kachel verlassen hat wird diese eben wieder freigegeben. Das Problem ist mir hier noch nicht klar. Warum geht das denn in deinem konkreten Fall nicht?
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

8

15.09.2018, 21:11

Hallo nochmal,

also die absolute xyPosition ist in der Mitter der Kachel. Die Bewegung läuft Kachelabhängig ab, soll heißen ich generier den Pfad zur Laufzeit, anschließend hol ich mir die xyPosition vom ersten Pfadknoten, dann prüfe ich die acht Richtungen, und bewege das Sprite.

Das Ganze sieht so aus, dass das Sprite immer von Kachelmittelpunkt zu Kachelmittelpunkt geht und immer auf halben Weg die verlassene Kachel auf false setzt. Also das geht. Nur wenn man diagonal läuft ( also nach einer geraden Strecke nicht direkt diagonal da gehts) läuft die Einheit natürlich auch bis zum Mittelpunkt und lässt dann die eben verlassene Kachel stehen, also beim Richtungswechsel(Norden 0 Süden 4). Dann läuft sie diagonal allerdings versetzt zum Pfad und korrigiert aber beim Betreten der letzten Kachel wieder.

Ich hab schon verstanden was du meintest und es müsste eig. auch gehen, allerdings nur ohne Diagonale.


Bei Bedarf poste ich die Methode.

Gruß Thomas

9

23.09.2018, 18:46

Ok, habs jetzt. Die Einheiten weichen sich aus zur Laufzeit. Aber ein gepfriemel ist das dann schon jedes abweichende verhalten der einheiten abzufangen.
Danke trotzdem für die antworten.

Werbeanzeige