Hallo,
ich habe ein Problem mit meinem folgenden Code. Ich bekomme es einfach nicht hin, dass eine Animation nur ein einziges mal durchgeführt wird, wenn eine Taste gedrückt wird.
Es ist ein simples Spiel, bei dem man ein Raumschiff navigieren kann.
Nun soll es so sein, dass, wenn man nach unten oder oben fliegt, das Schiff sich in eine Schräglage legt, dazu hab ich 5 PNGs, die halt nacheinander abgespielt werden sollen.
Ich bekomme eine Animation hin, wenn man die entsprechende Taste drückt, aber leider nur im Loop.
Vielleicht kann mir ja jemand auf die Sprünge helfen oder hat eine Idee. Ich bin irgendwie gerade blockiert.
Sleep wollte ich eigentlich vermeiden, sollte ich die Animation in eine neue Klasse packen?
Die Klasse Player wird in der Main Klasse im GameLoop aufgerufen, bzw. eben update() und getLook() im Frame.
Grüße,
C.
Hier der Code:
ich habe ein Problem mit meinem folgenden Code. Ich bekomme es einfach nicht hin, dass eine Animation nur ein einziges mal durchgeführt wird, wenn eine Taste gedrückt wird.
Es ist ein simples Spiel, bei dem man ein Raumschiff navigieren kann.
Nun soll es so sein, dass, wenn man nach unten oder oben fliegt, das Schiff sich in eine Schräglage legt, dazu hab ich 5 PNGs, die halt nacheinander abgespielt werden sollen.
Ich bekomme eine Animation hin, wenn man die entsprechende Taste drückt, aber leider nur im Loop.
Vielleicht kann mir ja jemand auf die Sprünge helfen oder hat eine Idee. Ich bin irgendwie gerade blockiert.
Sleep wollte ich eigentlich vermeiden, sollte ich die Animation in eine neue Klasse packen?
Die Klasse Player wird in der Main Klasse im GameLoop aufgerufen, bzw. eben update() und getLook() im Frame.
Grüße,
C.
Hier der Code:
Java:
//package GameOne;
import java.awt.Rectangle;
import java.awt.event.KeyEvent;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.text.DecimalFormat;
import java.util.List;
import javax.imageio.ImageIO;
public class Player {
private float f_xPos, f_yPos;
private BufferedImage lookAlive, lookDead;
private BufferedImage[] lookSpaceshipUp = new BufferedImage[5];
private BufferedImage[] lookSpaceshipDown = new BufferedImage[5];
// für die animation
private static final float NEEDANITIME = 0.4f;
private float aniTime = 0;
private long timeMillis;
private boolean isAlive = true;
public Player(float f_xPos, float f_yPos) {
this.f_xPos = f_xPos;
this.f_yPos = f_yPos;
// Erscheinung des Schiffes
try {
DecimalFormat df = new DecimalFormat("00");
for (int i = 0; i < 5; i++) {
String fileName = "gfx/spaceship/smallfighter00"
+ (df.format(i + 1)) + ".png";
lookSpaceshipUp[i] = ImageIO.read(getClass().getClassLoader()
.getResourceAsStream(fileName));
}
for (int i = 0; i < 5; i++) {
String fileName = "gfx/spaceship/smallfighter00"
+ (df.format(i + 7)) + ".png";
lookSpaceshipDown[i] = ImageIO.read(getClass().getClassLoader()
.getResourceAsStream(fileName));
}
lookAlive = ImageIO.read(getClass().getClassLoader()
.getResourceAsStream("gfx/spaceship/smallfighter0006.png"));
lookDead = ImageIO.read(getClass().getClassLoader()
.getResourceAsStream("gfx/spaceship_dead.png"));
} catch (IOException e) {
e.printStackTrace();
}
}
public void update(float timeSinceLastFrame) {
aniTime += timeSinceLastFrame;
if (aniTime > NEEDANITIME)aniTime = 0;
// bewegen
// nach oben
if (Keyboard.isKeyDown(KeyEvent.VK_W)) {
f_yPos-=300*timeSinceLastFrame;
}
// nach unten
if (Keyboard.isKeyDown(KeyEvent.VK_S)) {
f_yPos+=300*timeSinceLastFrame;
}
if (Keyboard.isKeyDown(KeyEvent.VK_A))
f_xPos -= 300 * timeSinceLastFrame;
if (Keyboard.isKeyDown(KeyEvent.VK_D))
f_xPos += 300 * timeSinceLastFrame;
}
public int getX() {
return (int) f_xPos;
}
public int getY() {
return (int) f_yPos;
}
public BufferedImage getLook() {
if (!isAlive)
return lookDead;
else {
if (Keyboard.isKeyDown(KeyEvent.VK_S)) {
return lookSpaceshipDown[4];
}
if (Keyboard.isKeyDown(KeyEvent.VK_W)) {
return lookSpaceshipUp[0];
}
return lookAlive;
}
}
}