# Spielfigur mit vielen Aktionen



## Aber wie? (13. Mrz 2012)

Hallo,
ich bin gerade dabei ein kleines Spiel zuschreiben.
Unteranderem kann man auch mit einem Charakter umherwandeln.
Dieser kann in 4 Richtungen gucken.

Außerdem kann er diverse aktionen ausführen.
Gehern
Schlagen
Rollen
Stehen
Schwimmen
Springen
Fahrradfahren 
usw.

Die Aktionen wiederum haben ja auch verschiedene Eigenschaften.
So würde ein Schlag das Stehen ja kurz unterbrechen und dann würde er weiter Stehen. Also: Es gibt Aktionen, die werden 'geloopt' und welche die den Loop kurz unterbrechen.

Ach und nochwas, es können jederzeit neue Aktionen hinzukommen (Schlafen, am Lagerfeuer si...).
Jetzt ist meine Frage wie man das schön Programmiert. Ich habe an eine State Machine gedacht? Und für die Bewegungen eine EventQueue?

Für Tipps wäre ich dankbar.


----------



## Noctarius (13. Mrz 2012)

Statemachine klingt schon sehr gut, im Prinzip kannst du so was bauen: Ein Eventsystem auf Intention-Basis.
Eine Intention kennt also eine Zeit die sie benötigt und z.B. auch ob sie abgebrochen werden darf. Wenn etwas passieren soll wird in das Eventsystem ein InterestForIntentionXYZ gelegt und das Eventsystem versucht die Intention zu erfüllen oder verweigert es eben.


----------



## Aber wie? (13. Mrz 2012)

Ok,
das weicht ja nicht allzu weit von meinem eigentlichen Konzept ab. Vielen dank, leider kann ich als Gast keinen Danke-Button drücken. 
Und eine Frage hätte ich noch. Ich hoffe ich darf sie mit in diesem Thread stellen.

Meine Map ist Tile basiert.
Außerdem können auf ihr verschiedene Objekte stehen (Häuser, Bäume...), es gibt zwei arten von Objekten, einmal die die man einmal an eine Stelle setzt und die dann auf dieser stehen bleiben, und die die sich bewegen.

Die die sich bewegen habe ich schon implementiert.

Die unbewegten noch nicht.
Diese werden sollen am Anfang in eine HashMap gespeichert werden. Als key dient die Nummer der Reihe auf die sie gerendert werden sollen. Nachdem eine Reihe gerendert wurde klicke ich mich also über einen Hook ein und gucke ob die Map für die Reihe ein Objekt hat. Wenn ja wird es gerendert, wenn nicht dan nicht.

Ich render immer nur die Tiles die man gerade sieht, aber es gibt ja Objekte die mehr als eine reihe Tiles hoch sind, wenn man sich jetzt auf sie zu bewegt erscheinen sie Quasi aus dem nichts sobald die reihe auf der ihre Untere Kante steht gerendert wird. Habt ihr eine Idee wie man das verhindern (bzw Algemein schöner machen) kann?

Vielen dank das ihr bis hier gelesen habt


----------



## Fu3L (13. Mrz 2012)

> Habt ihr eine Idee wie man das verhindern (bzw Algemein schöner machen) kann?



Ich hab letztens die stumpfe Variante genommen: Du merkst dir irgendwo wie hoch das höchste aller Objekte ist und prüfst halt x-Reihen tiefer als sonst, ob die Objekte in den sichtbaren Bereich fallen.


----------



## Aber wie? (13. Mrz 2012)

Wenn ich ganz ehrlich sein soll, finde ich das auch nich so schön.
Aber die Idee ist besser, als die, die ich hatte.
Vielen Dank.


----------



## Noctarius (13. Mrz 2012)

Warum nutzt du eine HashMap und nicht ein 2 dimensionales Array? Dort hast du automatisch Reihe und Spalte oder habe ich das Problem gerade falsch verstanden?


----------



## Fu3L (13. Mrz 2012)

> Wenn ich ganz ehrlich sein soll, finde ich das auch nich so schön.



Schön nicht, tut aber wenigstens 

@Noctarius: Es geht um Objekte, die über ihre eigentlichen "GrundTiles" hinausragen. Sagen wir ein Tile ist 50x50 und der Stamm eines Baumes ist genauso breit, aber der Baum auch 200 hoch. Dann muss man schon drei Tiles drüber gucken, ob der Baum im Bild ist. Das Problem hätte man wohl auch im 2D Array.


----------



## Noctarius (13. Mrz 2012)

Achso Overlapping Tiles  Jo dann ist die HashMap sinnvoll ^^


----------

