Bonjour, J'essaye de créer un jeu de casse-briques. Il existe une classe principale appelée Real_Main et une autre classe appelée Real_Create qui étend JPanel. J'ai l'impression que mon code est correct mais je n'arrive pas à déplacer mon rectangle avec les flèches droite et gauche. Quelqu'un pourrait-il me dire ce qui ne va pas? Et pourquoi avons-nous besoin d'une minuterie pour déplacer le rectangle?Rectangle ne bouge pas
import javax.swing.JFrame;
public class Real_Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame jf= new JFrame();
Real_Create panel=new Real_Create();
jf.setSize(500, 500);
jf.setVisible(true);
jf.setResizable(false);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.add(panel);
}
}
Real_Create:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JPanel;
import javax.swing.Timer;
public class Real_Create extends JPanel implements KeyListener,ActionListener {
int baseX=200;
int ballX=250;
int ballY=250;
int delay=20;
Timer tim;
Boolean play=false;
public Real_Create(){
addKeyListener(this);
setFocusable(true);
setFocusTraversalKeysEnabled(false);
tim=new Timer(delay,this);
tim.start();
}
public void paint(Graphics g){
//background
g.setColor(Color.black);
g.fillRect(1,1,500,500);
//baseplayer
g.setColor(Color.white);
g.fillRect(baseX, 430, 80, 10);
//ball
g.setColor(Color.green);
g.fillOval(ballX, ballY, 20, 20);
g.dispose();
}
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
tim.start();
repaint();
}
@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
if(e.getKeyCode()== KeyEvent.VK_RIGHT){
if(baseX >=420){
baseX=420;
}
else{
moveRight();
}
}
if(e.getKeyCode()== KeyEvent.VK_LEFT){
if(baseX <=0){
baseX=0;
}
else{
moveLeft();
}
}
}
@Override
public void keyReleased(KeyEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub
}
public void moveRight(){
play=true;
baseX+=10;
}
public void moveLeft(){
play=true;
baseX-=10;
}
}
image du jeu:
Je viens de tester votre code, et pour moi, déplacer le rect fonctionne parfaitement. C'est peut-être à cause de votre programme de capture d'écran, mais dans l'image, la fenêtre n'a pas de focus. Il doit avoir un focus pour que le keylistener fonctionne, essayez de cliquer sur la fenêtre. De plus, vous n'avez pas forcément besoin d'une minuterie pour déplacer le rect, pour le moment il ne fait que redessiner la fenêtre toutes les 20 ms, vous pouvez tout aussi bien appeler repeindre après une pression sur une touche, mais cela sera utile le ballon. – Gumbo