# Animationsproblem mit JGame



## heart_disease (21. Apr 2008)

Da ich vorhabe in Java ein kleines RPG zu programmieren, habe ich mir eine 2D-Spielengine gesucht - und gefunden. Meine Wahl viel auf JGame welche trotz eher schlechter Dokumentation von den bisher von mir entdeckten Engines am besten dokumentiert war.

Ich brauchte zuerst Stunden, nur um ein kleines Sprite mit den Pfeiltasten in dem Programmenster herumbewegen zu können. Um Grafiken, Sounds und Animationen einfacher zu laden, verwendet JGame sogenannte Table-Files.
Ich wollte eine Geh-Animation erstellen und hab mir die Definitionen für eine Animation aus den JGame-Tutorials auf der Homepage kopiert und an meine Bedürfnisse angepasst. Nur lassen sich jetzt die Animationen nicht abspielen, es wird immer nur das erste Bild der Animation angezeigt. Ich kämpfe schon seit Stunden damit, und langsam vergeht mir dir Lust daran ...
Stellt sich die Frage ob es letztendlich nicht einfacher wäre, alles selbst zu programmieren ...  :roll: 

Kennt sich zufällig jemand mit JGame aus und kann mir bei meinem Problem helfen?
Das hier ist meine Table-Datei:

```
// Define animation sprite sheet.
// The first numbers (0,0) are the topleft coordinates of the sprites.
// The next numbers (16,16) is the size of one sprite.
// The last numbers (0,0) is the number of pixels to skip between sprites.
chrono_front_sheet		../sprites/chrono_front.gif		0	0	20	36	0	0
chrono_back_sheet		../sprites/chrono_back.gif		0	0	21	36	0	0
chrono_side_sheet		../sprites/chrono_side.gif		0	0	22	36	0	0

// Get the sprites from the sprite sheet
// CHRONO FRONT SPRITES
chrono_anim_front01	-	0	chrono_front_sheet	0	-
chrono_anim_front02	-	0	chrono_front_sheet	1	-
chrono_anim_front03	-	0	chrono_front_sheet	2	-
chrono_anim_front04	-	0	chrono_front_sheet	3	-
chrono_anim_front05	-	0	chrono_front_sheet	4	-
chrono_anim_front06	-	0	chrono_front_sheet	5	-

// CHRONO BACK SPRITES
chrono_anim_back01	-	0	chrono_back_sheet	0	-
chrono_anim_back02	-	0	chrono_back_sheet	1	-
chrono_anim_back03	-	0	chrono_back_sheet	2	-
chrono_anim_back04	-	0	chrono_back_sheet	3	-
chrono_anim_back05	-	0	chrono_back_sheet	4	-
chrono_anim_back06	-	0	chrono_back_sheet	5	-

// CHRONO LEFT SPRITES
chrono_anim_left01	-	0	chrono_side_sheet	0	x
chrono_anim_left02	-	0	chrono_side_sheet	1	x
chrono_anim_left03	-	0	chrono_side_sheet	2	x
chrono_anim_left04	-	0	chrono_side_sheet	3	x
chrono_anim_left05	-	0	chrono_side_sheet	4	x
chrono_anim_left06	-	0	chrono_side_sheet	5	x

// CHRONO RIGHT SPRITES
chrono_anim_right01	-	0	chrono_side_sheet	0	-
chrono_anim_right02	-	0	chrono_side_sheet	1	-
chrono_anim_right03	-	0	chrono_side_sheet	2	-
chrono_anim_right04	-	0	chrono_side_sheet	3	-
chrono_anim_right05	-	0	chrono_side_sheet	4	-
chrono_anim_right06	-	0	chrono_side_sheet	5	-

// Define animations from the sprites.
// 1.0 is the animation speed
// the "true" indicates a ping-pong animation
chrono_anim_front	chrono_anim_front01;chrono_anim_front02;chrono_anim_front03;chrono_anim_front04;chrono_anim_front05;chrono_anim_front06	0.4
chrono_anim_back	chrono_anim_back01;chrono_anim_back02;chrono_anim_back03;chrono_anim_back04;chrono_anim_back05;chrono_anim_back06	0.3
chrono_anim_left	chrono_anim_left01;chrono_anim_left02;chrono_anim_left03;chrono_anim_left04;chrono_anim_left05;chrono_anim_left06	0.3
chrono_anim_right	chrono_anim_right01;chrono_anim_right02;chrono_anim_right03;chrono_anim_right04;chrono_anim_right05;chrono_anim_right06	0.3

player	-	0	../sprites/player.gif	-

// Boden
floor1	-	0	../sprites/floor1.png	-

// Wand
wall1	-	0	../sprites/wall1.png	-

// Items
bett1	-	1	../sprites/bett.png	-
```


----------



## zilti (21. Apr 2008)

Also wenn du für das Bewegen eines Sprites Stunden brauchst, nimmst du besser das in Java integrierte Java2D - das kann auch sehr viel, ist gut dokumentiert und einfach. Und du bist nicht von nem Kleinprojekt abhängig. Am Ende basiert eh jede dieser Engines auf Java2D.


----------



## Guest (22. Apr 2008)

@zilti
Danke für deine Antwort, aber ich konnte das Problem jetzt zum Glück selbst lösen (nach zwei vergrübelten Nachmittagen :roll: ).

Damit die Animationen auch abgespielt werden, ist es erforderlich die Methode *doFrame()* der Hauptklasse *JGEngine* zu überschreiben und daraus die Methode *moveObjects()* aufzurufen. Um zu vermeiden dass die Spielfigur aus dem Spielfeld "getragen" wird, müssen die Variablen *xspeed* und *yspeed* des JGObject's der Spielfigur auf 0 gesetzt sein!

Ferner habe ich endlich herausgefunden wie das Z-Ordering der Spielobjekte funktioniert. Beim Initialisieren eines *JGObject* muss ein eindeutiger Name an die Instanz vergeben werden. Das Objekt dessen Name alphabetisch am letzten kommt, wird auf der obersten Ebene angzeigt.

Wenn ich mich einmal besser mit der Engine zurechtgefunden habe, möchte ich gerne ein Tutorial dafür schreiben. JGame bietet relativ viele Möglichkeiten um 2D-Spiele umzusetzen, die Tutorials und Dokumentationen dafür sind hingegen leider ernüchternd.


----------

