Witam, chciałem napisać sobie prostą gierkę w Java ale już na początku pojawiły się schody a mianowicie obiekt reprezentujący gracza nie zawsze jest wyświetlany na tle, a ja nie wiem co jest tego przyczyną. Dlaczego tak się dzieje że raz jest a raz go nie ma, jak to naprawić?
Kwadrat reprezentujący gracza
public class Player extends JComponent{
public int px=0;
public int py=600;
public void paintComponent(Graphics g){
Graphics2D g2 = (Graphics2D) g;
g2.setColor(Color.GREEN);
g2.fillRect(px, py, 50, 70);
}
}
klasa tła w której dzieje się właściwie wszstko
public class ArenaA extends JComponent implements Runnable{
Random los = new Random();
int arenasize=los.nextInt(3000);
public Image image;
Player player = new Player();
public ArenaA(Image image) {
this.image = image;
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(image, 0, 0, getWidth(), getHeight(), this);
setFocusable(true);
requestFocusInWindow();
}
@Override
public void run() {
this.add(player);
player.setVisible(true);
this.addKeyListener(new KeyListener(){
@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
if(e.getKeyCode()==KeyEvent.VK_D){
player.px++;
camx--;
repaint();
}
if(e.getKeyCode()==KeyEvent.VK_A){
player.px--;
repaint();
}
if(e.getKeyCode()==KeyEvent.VK_W){
player.py--;
repaint();
}
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
});
}
public int getArenaSize(){
return arenasize;
}
Klasa z JFrame itd.
public class ArenaTest {
static Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
static int width = (int) screenSize.getWidth();
static int height = (int) screenSize.getHeight();
static JFrame arenaframe = new JFrame("ARENA");
public void ShowArenaFrame() throws IOException, InterruptedException{
File f = new File("C:/Users/X/Downloads/arena.jpg");
BufferedImage myImage = ImageIO.read(f);
ArenaA ar = new ArenaA(myImage);
Thread tar = new Thread(ar);
tar.start();
arenaframe.setContentPane(ar);
arenaframe.setLayout(new BorderLayout());
arenaframe.setUndecorated(true);
arenaframe.setBounds(0,0,ar.getArenaSize()+width,height);
arenaframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
arenaframe.setVisible(true);
}}