Hallo,
bin gerade dabei PingPong mit Java zu programmieren.
Dabei komme ich mit dem Buffered Image nicht zurecht. Kann mir jemand sagen, wie ich das so einbinde, dass es nicht mehr flackert?
Würde mich über hilfreiche Antworten freuen.
bin gerade dabei PingPong mit Java zu programmieren.
Dabei komme ich mit dem Buffered Image nicht zurecht. Kann mir jemand sagen, wie ich das so einbinde, dass es nicht mehr flackert?
Java:
import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;
import javax.swing.*;
public class Spiel extends JFrame implements Runnable, KeyListener {
/**
*
*/
private static final long serialVersionUID = 1L;
boolean up=false;
boolean down=false;
int spieler=1;
JPanel spielfeld = new JPanel();
//Anfangskoordinaten des Spielers, KI und Ball
//Spieler
private int s_x=10;
private int s_y=170;
//KI
private int k_x=385;
private int k_y=170;
//Ball
private int b_x=200;
private int b_y=200;
public Spiel(){
Thread th=new Thread(this);
th.start();
setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
setSize( 400, 400 );
setVisible( true );
spielfeld.setBackground(Color.BLACK);
JPanel statusleiste = new JPanel();
statusleiste.setBackground(Color.lightGray);
setLayout(new BorderLayout());
add( spielfeld , BorderLayout.CENTER);
add( statusleiste , BorderLayout.NORTH);
}
/*
public void paint(Graphics g) {
super.paint(g);
//Schlaeger vom roten Spieler
g.setColor(Color.RED);
g.fillRect(10, 170, 5, 50);
//Schlaeger vom blauen Spieler
g.setColor(Color.BLUE);
g.fillRect(385, 170, 5, 50);
//Ball
g.setColor(Color.GREEN);
g.fillOval(200, 200, 10, 10);
//System.out.println("Test");
}
*/
public void update(Graphics g) {
paint(g);
}
public void paint(Graphics g) {
super.paint(g);
//Schlaeger vom roten Spieler
g.setColor(Color.RED);
g.fillRect(s_x, s_y, 5, 50);
//Schlaeger vom blauen Spieler
g.setColor(Color.BLUE);
g.fillRect(k_x, k_y, 5, 50);
//Ball
g.setColor(Color.GREEN);
g.fillOval(b_x, b_y, 10, 10);
}
BufferedImage buffer = new BufferedImage(400,400, BufferedImage.TYPE_INT_ARGB);
public void zeichneSpielfeld() {
Graphics g = buffer.getGraphics();
g.setColor(Color.RED);
g.fillRect(s_x, s_y, 5, 50);
g = this.spielfeld.getGraphics();
g.drawImage(buffer, 20, 50, null);
}
//@Override
public void keyPressed(KeyEvent e){
int key =e.getKeyCode();
switch(key){
case KeyEvent.VK_UP:
up=true;
break;
case KeyEvent.VK_DOWN:
down=true;
break;
}
}
//@Override
public void keyReleased(KeyEvent e){
int key =e.getKeyCode();
switch(key){
case KeyEvent.VK_UP:
up=false;
break;
case KeyEvent.VK_DOWN:
down=false;
break;
}
}
public void move(){
if(up==true)s_y--;
if(down==true)s_y++;
pos_s(s_x, s_y);
}
//Position des Spielers
public void pos_s(int x, int y){
this.s_x=x;
this.s_y=y;
//repaint();
}
@Override
public void run() {
// TODO Auto-generated method stub
//Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
while (true)
{
// Neuzeichnen des Applets
try
{
// Stoppen des Threads für in Klammern angegebene Millisekunden
Thread.sleep (20);
}
catch (InterruptedException ex)
{
// do nothing
}
move();
// repaint();
zeichneSpielfeld();
// Zurücksetzen der ThreadPriority auf Maximalwert
// Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
}
}
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
}
Würde mich über hilfreiche Antworten freuen.