Ich habe mich jetzt mal oben mit dem Spiele TUT beschäftigt, nachdem ich gestern darauf hin verwiesen wurde.
Erstmal großes Lob. Es ist wirklich gut zu verstehen. Aber leider habe ich ein Problem. Meine bisherigen Zeichnungen werden nicht gelöscht. Dadruch ergeben sich schwarze Linien, die Fframzahl ist nicht mehr sichtbar usw.
Jetzt meine Frage: Wie kann ich die vorigen Objecet löschen, damit das erwünschte Ergebnis zu sehen ist?
Hier ist mal der Code meines Fensters:
mfg.
Dagobert
Erstmal großes Lob. Es ist wirklich gut zu verstehen. Aber leider habe ich ein Problem. Meine bisherigen Zeichnungen werden nicht gelöscht. Dadruch ergeben sich schwarze Linien, die Fframzahl ist nicht mehr sichtbar usw.
Jetzt meine Frage: Wie kann ich die vorigen Objecet löschen, damit das erwünschte Ergebnis zu sehen ist?
Hier ist mal der Code meines Fensters:
Code:
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import java.util.Vector;
import javax.imageio.ImageIO;
import javax.swing.*;
public class GamePanel extends JPanel implements Runnable, KeyListener {
public static void main(String[] args) {
new GamePanel(800, 600);
}
boolean game_running = true;
long delta = 0;
long last = 0;
long fps = 0;
Sprite copter;
Vector<Sprite> actors;
boolean up = false;
boolean down = false;
boolean left = false;
boolean right = false;
int speed = 50;
public GamePanel(int w, int h) {
this.setPreferredSize(new Dimension(w, h));
JFrame frame = new JFrame();
frame.setTitle("HubschrauberDemo");
frame.setLocation(100, 100);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.addKeyListener(this);
frame.add(this);
frame.pack();
frame.setVisible(true);
doInitializations();
}
public void doInitializations() {
this.actors = new Vector<Sprite>();
BufferedImage[] heli = loadPics("pics/heli.gif", 4);
this.copter = new Sprite(heli, 400, 300, 100, this);
this.actors.add(this.copter);
this.last = System.nanoTime();
Thread t = new Thread(this);
t.start();
}
private void checkKeys() {
if(this.up){
this.copter.setVerticalSpeed(-this.speed);
}
if(this.down){
this.copter.setVerticalSpeed(this.speed);
}
if(this.left){
this.copter.setHorizontalSpeed(-this.speed);
}
if(this.right){
this.copter.setHorizontalSpeed(this.speed);
}
if(!this.up&&!this.down){
this.copter.setVerticalSpeed(0);
}
if(!this.left&&!this.right){
this.copter.setHorizontalSpeed(0);
}
}
private void moveObjects() {
for(Movable mov:this.actors){
mov.move(this.delta);
}
}
private void doLogic() {
for(Movable mov:this.actors){
mov.doLogic(this.delta);
}
}
public void computeDelta() {
this.delta = System.nanoTime() - this.last;
this.last = System.nanoTime();
fps = ((long) 1e9) / this.delta;
}
public void run() {
while (game_running) {
computeDelta();
checkKeys();
doLogic();
moveObjects();
repaint();
try {
Thread.sleep(10);
} catch (InterruptedException e) {
}
}
}
public void paintComponent(Graphics g) {
super.paintComponents(g);
g.setColor(Color.red);
g.drawString("FPS: " + this.fps, 20, 10);
if(this.actors != null){
for(Drawable draw:this.actors){
draw.drawObjects(g);
}
}
}
private BufferedImage[] loadPics(String path, int NumberOfPics) {
BufferedImage[] anim = new BufferedImage[NumberOfPics];
BufferedImage source = null;
URL pic_url = getClass().getClassLoader().getResource(path);
try {
source = ImageIO.read(pic_url);
} catch (IOException e) {
}
for (int x = 0; x < NumberOfPics; x++) {
anim[x] = source.getSubimage(x * source.getWidth() / NumberOfPics,
0, source.getWidth() / NumberOfPics, source.getHeight());
}
return anim;
}
public void keyPressed(KeyEvent e) {
if(e.getKeyCode()==KeyEvent.VK_UP){
this.up = true;
}
if(e.getKeyCode()==KeyEvent.VK_DOWN){
this.down = true;
}
if(e.getKeyCode()==KeyEvent.VK_LEFT){
this.left = true;
}
if(e.getKeyCode()==KeyEvent.VK_RIGHT){
this.right = true;
}
}
public void keyReleased(KeyEvent e) {
if(e.getKeyCode()==KeyEvent.VK_UP){
this.up = false;
}
if(e.getKeyCode()==KeyEvent.VK_DOWN){
this.down = false;
}
if(e.getKeyCode()==KeyEvent.VK_LEFT){
this.left = false;
}
if(e.getKeyCode()==KeyEvent.VK_RIGHT){
this.right = false;
}
}
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
}
mfg.
Dagobert