Laufanimation eines Sprites

Eichelhäer

Bekanntes Mitglied
Hallo,

wie erstellt man eine saubere Laufanimation einer aus mehreren Einzelbildern bestehenden Animation? Ich habe bereits mit einem Timer rumexperimentiert allerdings ohne zufriedenstellendes Ergebnis. Auch das Youtube Video von LionLek der die Interpolation beschreibt konnte mir nicht helfen.

Hier mal meine Player Klasse:

Java:
package game;

import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.Timer;

public class Robin {

    public int x = 200;
    public int y = 100;
    public int speed = 2;
    public boolean down;
    public int counter;
    Timer timer;
   
    public int imgcounter;
   
    BufferedImage[] robinimg;
   
    public Robin(){
       
        robinimg = new BufferedImage[9];
       
        try {
            //down
            robinimg[0] = ImageIO.read(getClass().getClassLoader().getResourceAsStream("pics/Hood.png")).getSubimage(7,14,18,18);
            robinimg[1] = ImageIO.read(getClass().getClassLoader().getResourceAsStream("pics/Hood.png")).getSubimage(28,14,18,18);
            robinimg[2] = ImageIO.read(getClass().getClassLoader().getResourceAsStream("pics/Hood.png")).getSubimage(50,14,18,18);
            //right
            robinimg[3] = ImageIO.read(getClass().getClassLoader().getResourceAsStream("pics/Hood.png")).getSubimage(7,37,17,20);
            robinimg[4] = ImageIO.read(getClass().getClassLoader().getResourceAsStream("pics/Hood.png")).getSubimage(26,36,17,20);
            robinimg[5] = ImageIO.read(getClass().getClassLoader().getResourceAsStream("pics/Hood.png")).getSubimage(46,36,16,20);
            //up
            robinimg[6] = ImageIO.read(getClass().getClassLoader().getResourceAsStream("pics/Hood.png")).getSubimage(5,61,19,19);
            robinimg[7] = ImageIO.read(getClass().getClassLoader().getResourceAsStream("pics/Hood.png")).getSubimage(27,60,17,20);
            robinimg[8] = ImageIO.read(getClass().getClassLoader().getResourceAsStream("pics/Hood.png")).getSubimage(50,61,18,19);
       
        } catch (IOException e) {e.printStackTrace();}
    }
   
   
   
    public void update(){
       
        if(Keys.up){
            y -= speed;
           
            imgcounter = 6;
            imgcounter++;
            if(imgcounter==8){
                    imgcounter = 6;
            }
           
        }
       
        if(Keys.down){
            y += speed;
           
            imgcounter = 0;
            
        }
        if(Keys.left){
            x -= speed;
        }
        if(Keys.right){
            x += speed;
            imgcounter = 3;
        }
    }
   
    public void render(Graphics g){
        g.drawImage(robinimg[imgcounter], x, y,null);
    }
}

Wäre für Hilfe dankbar.
 

RalleYTN

Bekanntes Mitglied
Zu erst einmal warum lädst du ein und das selbe Bild 9 Mal. So wäre es performanter:
Java:
BufferedImage spriteBuffer = ImageIO.read(this.getClass().getClassLoader().getResourceAsStream("pics/Hood.png"));
BufferedImage[] tiles = new BufferedImage[9];
tiles[0] = spriteBuffer.getSubimage(7, 14, 18, 18);
....
Achja und versuch deinen Timer mal mit nem System.currentTimeMillis(). da brauchst du dann jedes Mal einen startTimer und einen updateTimer aber es funktioniert. Wenn man es richtig macht.
 

System.exit(0)

Aktives Mitglied
Es wäre auch einfacher, mit Frames per Second zu arbeiten.
Du lässt dir bei jedem Schleifendurchlauf die Zeit ausgeben, die seit dem letzten Aufruf vergangen ist.
Dann rechnest du die Bildfrequenz aus.
Weiterhin legst du die Bewegungsgeschwindigkeit in Pixeln pro Sekunde fest.
Nun brauchst du nur noch die inkrementelle Bewegung pro Bildaufbau auszurechnen und umzusetzen.

x = x + v / fps

mfg

System.exit(0)
 

Eichelhäer

Bekanntes Mitglied
Hallo,
danke für die Antworten.
Zum Problem... .
Ich habe die Bildfrequenz erfolgreich ausgerechnet beträgt 21 fps.
Der Wert für die Geschwindigkeit beträgt 3 Pixel.
In der update Methode des Sprites, dort wo die Tasten abgefragt werden, brauch ich nun noch etwas Hilfe.
Also:

Java:
...
public void update(long fps){
if(Taste.right){
x = x + (speed/fps);

Wo lade ich hier die einzelnen Bilder??
 

Eichelhäer

Bekanntes Mitglied
Hallo nochmal!!

Ich habs jetzt fast.

Das Problem it nun folgendes:

Die Animation läuft sehr, sehr schnell ab, während sich das Sprite als solches kaum vorwärts bewegt.

Hier mal der Code für nach Rechts gehen:

Java:
if(Taste.right){
//Bewegung
x = x + (speed/fps);
//Bildladen
counter++;
counter = counter%3;
imgcounter = counter+3;//das plus 3 ist nur ab welchem Sprite auf dem Spritesheet gezählt werden soll.
...

Die Geschwindigkeit pro Pixel beträgt momentan 100 und die fps betragen konstante 30.

Wäre für einen Denkantoß oder gar die Lösung ehr dankbar.

Grus Eichelhäer
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Seltsame Exception bei Code eines Spiele-Tutorials Spiele- und Multimedia-Programmierung 6
R Ideen für die Backend-Entwicklung eines Games gesucht Spiele- und Multimedia-Programmierung 8
A Programmieren eines Memorys mit Java (in Eclipse) Spiele- und Multimedia-Programmierung 5
T Position eines Image verändern mithilfe eines Timers Spiele- und Multimedia-Programmierung 6
E Programmierung eines 2.5D Point&Click Adventures ohne Spieleengine machbar? Spiele- und Multimedia-Programmierung 14
K Click innerhalb eines 45° gekippten Rechtecks Spiele- und Multimedia-Programmierung 9
J LibGdx_3D: Klamotten eines Charakters modifizieren Spiele- und Multimedia-Programmierung 2
K Erstellen eines Fotoalbums mit Java Spiele- und Multimedia-Programmierung 8
R Fehler beim Laden eines 2D-Bildes Spiele- und Multimedia-Programmierung 3
L OpenGL TransformationMatrix eines Flugzeugs Spiele- und Multimedia-Programmierung 2
M Programmierung eines "Fantasy Rollenspiels" Spiele- und Multimedia-Programmierung 5
Finalspace Entwicklung eines Jump & Run Spiels Video-Tutorial Spiele- und Multimedia-Programmierung 12
T Hintergrundmusik eines Spiels mit Hilfe von JLayer Spiele- und Multimedia-Programmierung 12
M Cylinder anhand eines Vektors ausrichten (Java3d) Spiele- und Multimedia-Programmierung 0
M bewegen eines Objektes Spiele- und Multimedia-Programmierung 2
U Hilfe bei Implementierung eines PointSounds in Java3D Spiele- und Multimedia-Programmierung 1
gamebreiti Index eines Elements einer ArrayList abfragen Spiele- und Multimedia-Programmierung 1
X "Rebuffen" - Messen der Zeit eines Timers Spiele- und Multimedia-Programmierung 3
S Design eines Schachspiels Spiele- und Multimedia-Programmierung 3
S Mausklicks innerhalb eines JFrames/SWTBrowser ohne richtige Maus simulieren Spiele- und Multimedia-Programmierung 6
F Programmierung eines Bots Spiele- und Multimedia-Programmierung 23
A Wann ist ein Punkt inerhalb eines Polygons? Spiele- und Multimedia-Programmierung 2
F LWJGL Problem mit Erstellen eines Objekts und der Kamera Spiele- und Multimedia-Programmierung 5
R Drehen eines Bildes relativ zur Mauszeigerposition Spiele- und Multimedia-Programmierung 2
M Pattern zur Auswahl eines Objektes anhand vieler Kriterien Spiele- und Multimedia-Programmierung 2
H Skalierung eines Polygons ohne das es verschoben wird Spiele- und Multimedia-Programmierung 3
R Triangulation eines komplexen Polygons Spiele- und Multimedia-Programmierung 4
L Lwjgl Darstellung eines Kreises im Raum Spiele- und Multimedia-Programmierung 3
M Pixel eines BufferedImage bearbeiten (Performance) Spiele- und Multimedia-Programmierung 23
G Rotieren eines Objekts (2D) Spiele- und Multimedia-Programmierung 8
F nur Ausschnitt eines Image zeichnen Spiele- und Multimedia-Programmierung 9
S Umfang eines Polygons erzeugen Spiele- und Multimedia-Programmierung 1
D Highscoreliste eines Applets funktioniert online nicht Spiele- und Multimedia-Programmierung 4
W CannotRealizeException (jmf) beim abspielen eines liedes Spiele- und Multimedia-Programmierung 3
F Meine Aufgabe: Client-Server am Beispiel einer Implementation eines Tic-Tac-Toe Netzwerkspieles Spiele- und Multimedia-Programmierung 7
D Koordinaten eines 2D Sprites Spiele- und Multimedia-Programmierung 2
B Teile eines Bildes laden - BitBlk und drawImage Spiele- und Multimedia-Programmierung 3
S Interpolation eines Bildes Spiele- und Multimedia-Programmierung 6
S Problem beim laden eines Bildes in einer Methode Spiele- und Multimedia-Programmierung 14
N Bildposition innerhalb eines anderen Bildes ermitteln Spiele- und Multimedia-Programmierung 2
G rotation eines würfels Spiele- und Multimedia-Programmierung 9
G Bewegung eines Grafikobjektes Spiele- und Multimedia-Programmierung 7
A Programmieren eines Bruchrechners Spiele- und Multimedia-Programmierung 3
H Decke zeichnen mit Hilfe eines Polygons Spiele- und Multimedia-Programmierung 2
J Rotieren eines 2D Images endet in Java heap space Error Spiele- und Multimedia-Programmierung 15
W Affine Transformation, Rotieren eines Objekts Spiele- und Multimedia-Programmierung 2
S fließende/bewegende Striche eines Auswahlrechtecks Spiele- und Multimedia-Programmierung 9
A Bounds eines gedrehten Objekts berechnen Spiele- und Multimedia-Programmierung 30
T Erstellen eines ausdruckbaren Formulars Spiele- und Multimedia-Programmierung 5
T Umsetzung eines 2D Jump and Runs Spiele- und Multimedia-Programmierung 7
T Brightness eines Bildes [DRINGEND] Spiele- und Multimedia-Programmierung 2
S Java3D - mehrere Instanzen eines Geometrieobjektes erzeugen Spiele- und Multimedia-Programmierung 3
ARadauer Grauwerte eines jpg ermitteln Spiele- und Multimedia-Programmierung 4
A Anzeigen eines Grapfen Spiele- und Multimedia-Programmierung 13
R Die korrekte Breite/Höhe eines Bildes wird nicht erkannt. Spiele- und Multimedia-Programmierung 2
S Problem bzgl. Umsetzung eines Rollenspiel Spiele- und Multimedia-Programmierung 6
M Ausschneiden eines Bereichs / Avatar Spiele- und Multimedia-Programmierung 2
G Ermitteln eines Punktes in einer anderen TransformGroup Spiele- und Multimedia-Programmierung 2
M Frage eines Anfängers Spiele- und Multimedia-Programmierung 3
DEvent [2D] Farbe bestimmten Pixels eines Bildes ändern Spiele- und Multimedia-Programmierung 3
V Wie berechnet man das Bild eines Schwarzen Loches in Java? Spiele- und Multimedia-Programmierung 10
G Breite eines Strings Spiele- und Multimedia-Programmierung 2
S Text an einer Seite eines Cubes Spiele- und Multimedia-Programmierung 7
F Image eines bestimmten Bereichs eines JPanels erstellen Spiele- und Multimedia-Programmierung 4
N Grafik als Hintergrund eines Rechtecks verwenden? Spiele- und Multimedia-Programmierung 4
N Rundenstrategiespiel - Problem beim Drehen eines Bildes Spiele- und Multimedia-Programmierung 18
F Brauche Hilfe bei Bewegung eines Rechtecks [Applet] Spiele- und Multimedia-Programmierung 5
T Java2D Spiel, beim Hinzufügen eines Bildes ruckelt das ganze Spiele- und Multimedia-Programmierung 3
F Position eines Objektes auslesen. Spiele- und Multimedia-Programmierung 7
W Rotation eines Objektes Spiele- und Multimedia-Programmierung 2
M Zerschneiden eines Bildes mit Wellenlinien? Spiele- und Multimedia-Programmierung 2
S Simulation in der Art eines Schachbrett Spiele- und Multimedia-Programmierung 2
A 2-Achsen Rotation eines Würfels Spiele- und Multimedia-Programmierung 4
L nicht sichtbare Kanten eines Würfels Spiele- und Multimedia-Programmierung 2
S MouseEvents für Sprites Spiele- und Multimedia-Programmierung 3
Anfänger2011 Wichtig: Grafik und Sprites erstellen Spiele- und Multimedia-Programmierung 1
lumo opengl, sprites/tiles Spiele- und Multimedia-Programmierung 8
K Sprites mit Transparenten Hintergrund Spiele- und Multimedia-Programmierung 2
C 2D Sprites an die JPanel Größe (Auflösung) anpassen/skalieren Spiele- und Multimedia-Programmierung 3
Quaxli isometrische Sprites erstellen Spiele- und Multimedia-Programmierung 2
D Unterscheidung von Sprites mit verschiedenen Eigenschaften Spiele- und Multimedia-Programmierung 4
P 2D Spiel mir drehbaren Bildern (Sprites) programmieren Spiele- und Multimedia-Programmierung 10
K Sprites / Kollision Spiele- und Multimedia-Programmierung 3
H sprites Spiele- und Multimedia-Programmierung 19

Ähnliche Java Themen

Neue Themen


Oben