Je crée un cube qui rebondit sur un cadre. Pour détecter la limite du cadre, j'ai utilisé getHeight() et getWidth() du composant JComponent dans le JFrame et calculé la limite possible afin que le cube puisse rebondir.Pourquoi getHeight() n'est pas égal à la hauteur du cadre?
Cela fonctionne très bien pour getWidth(). Cependant, je ne peux pas le faire rebondir sur la limite de getHeight().
Lorsque le cu * be arrive en haut de la fenêtre, il continue de tourner pendant environ 10 pixels avant de rebondir.
Voici la capture d'écran pour ce problème.
Voici mon code:
public class Cube {
final public static int DIMENSION = 100;
private final static int D_X = 20;
private final static int D_Y = -20;
private final static int SPEED = 1;
private int xVelBK;
private int yVelBK;
private int xVel;
private int yVel;
private CubePoint[] pts;
public Cube(int x, int y){
xVel = SPEED;
yVel = SPEED;
pts = new CubePoint[8];
pts[0] = new CubePoint(x,y);
pts[1] = new CubePoint(x,y - DIMENSION);
pts[2] = new CubePoint(x + DIMENSION,y - DIMENSION);
pts[3] = new CubePoint(x + DIMENSION,y);
pts[4] = new CubePoint(x + D_X,y + D_Y);
pts[5] = new CubePoint(x + D_X,y + D_Y - DIMENSION);
pts[6] = new CubePoint(x + D_X + DIMENSION,y + D_Y - DIMENSION);
pts[7] = new CubePoint(x + D_X + DIMENSION,y + D_Y);
}
public void move(int componentWidth, int componentHeight){
......
//bug in here
if (pts[0].getY() - DIMENSION - D_Y <= 0) {
yVel = SPEED;
}
.......
}
..........
}
Voici le composant:
public class CubeComponent extends JComponent {
...........
private Cube cube;
private Timer timer;
private CubePoint originMousePos;
private CubePoint closest;
private Font font;
private int mode;
private int delay = DEFAULT_DELAY ;
private int mouseToClosestX;
private int mouseToClosestY;
class CubeMoveListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e){
cube.move(getWidth(),getHeight());
repaint();
}
}
@Override
public void paintComponent(Graphics g){
Graphics2D g2 = (Graphics2D)g;
cube.draw(g2);
}
}
Le titre de la fenêtre est inclus dans la taille de la fenêtre. Il y a une fonction qui vous indique la taille de la "partie intérieure" de la fenêtre, mais je ne me rappelle pas comment elle s'appelle maintenant. (Quelqu'un d'autre pourrait) – immibis
'public void paintComponent (Graphics g) {..' devrait être public void paintComponent (Graphics g) {super.paintComponent (g); .. »(pour la 5ème fois aujourd'hui). –
duplication possible de [JFrame: obtention de la taille réelle du contenu] (http://stackoverflow.com/questions/7154633/jframe-getting-actual-content-size) – fdsa