Animationsproblem mit JGame

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 … :twisted:

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	-

Ich konnte das Problem jetzt zum Glück selbst lösen (nach zwei vergrübelten Nachmittagen :twisted: ).

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. :frowning:

Auch wenn dir keiner von uns helfen konnte: Schön, dass du dein Problem lösen konntest! :slight_smile:

Im Wiki von byte-welt.de ist reichlich Platz dafür, interessante Artikel und gute Autoren sind immer stets willkommen!