Hello tout le monde...je tente de faire un pong et j'ai un problème avec la gestion des collisions de mon paddle et les coins de la fenêtre.
Lorsque j'appui sur Event.VK_UP...mon paddle se déplace normal en ajoutant la vélocité à la dernière position et lorqu'il arrive à y=0, la position "paddle.y" est remise à 0 donc il ne dépasse pas. mais pour Event.VK_DOWN en appuyant une seule fois il va directement se mettre à
"y=Largeur_de_la fenetre - largeur_du_paddle" apparament...je vois la position avec un Sysout...mais le rendu visuel montre même que
public class Paddle {
private int x;
private int y;
private Color color;
//constantes dimension d'un paddle
public final static int WIDTH= 5;
public final static int HEIGHT = 50;
public Paddle(int x , int y,Color c)
{
this.x = x;
this.y = y;
color = c ;
}
public void draw(Graphics g)
{
g.setColor(color);
g.fillRect(x, y, Paddle.WIDTH, Paddle.HEIGHT);
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public void keyPressed(KeyEvent k)
{
//les collision sont directement traitées en fonction de la touche appuyée
switch(k.getKeyCode())
{
case KeyEvent.VK_UP :
if(this.getY() >0)
// GraphicContent.yVelocity est une variable static de Mon Panel
this.setY(this.getY() - GraphicContent.yVelocity);
//si on touche l'axe y=0 le paddle n'avance plus
this.setY(0);
break;
case KeyEvent.VK_DOWN :
//Game.Height est la taille de ma frame
if(this.getY()> Game.HEIGHT - Paddle.HEIGHT)
//Normalement avec this.setY(taille de la frame - longueur_du_paddle c'est censé ne pas dépasser (je pense)
this.setY(Game.HEiGHT - Paddle.HEIGHT);
//j'affiche la position du paddle que j'ai créer dans mon Panel pour évaluer la coordonnée en y de mon paddle
public class GraphicContent extends JPanel implements ActionListener,KeyListener{
/**
*
*/
private static final long serialVersionUID = 1L;
Timer time;
public static Paddle pad;
static int yVelocity = 2;
public GraphicContent() {
time = new Timer(10,this);
pad= new Paddle(2,(int)((Game.HEiGHT-Paddle.HEIGHT) / 2),new Color(33,0,15));
this.addKeyListener(this);
this.setFocusable(true);
time.start();
}
public void draw(Graphics g) {
pad.draw(g);
}
public void paintComponent(Graphics g)
{
Graphics2D g2d = (Graphics2D) g;
this.draw(g2d);
}
@Override
public void actionPerformed(ActionEvent e) {
repaint();
}
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
pad.keyPressed(e);
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
}
vérification de collision
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.