Olá, possuo um simples GUI em que quando uma bolinha bate na parede, o jogador perde o jogo e precisa recomeçar, porém eu gostaria de fazer o seguinte, aumentar a velocidade da bolinha, que eu defini como 1 pixel, só que por exemplo se eu defino como 3 pixels a velocidade, quando a bolinha bater na parede que seria a posição 271 por exemplo, ela passa reto, pois 271 não é multiplo de 3.
Eu sei que parece complicado então vou fazer uma pergunta direta:
Como acelerar a velocidade de maneira correta, em que o jogador se passar por aquela posição, ele morra?
meu código atual:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
/**
*
* @author Usuario
*/
class Panel extends JPanel implements KeyListener {
int PosX = 185;
int PosY = 125;
boolean isAlive = true;
private JLabel L;
public Panel() {
this.setPreferredSize(new Dimension(400, 325));
this.setFocusable(true);
this.addKeyListener(this);
L = new JLabel();
L.setForeground(Color.red);
this.add(L);
}
public void keyPressed(KeyEvent e) {
switch (e.getKeyCode()) {
case KeyEvent.VK_UP:
if(PosY == 0) { isAlive = false; break; }
if(isAlive == false) { break; }
PosY -= 1;
break;
case KeyEvent.VK_DOWN:
if(PosY == 270) { isAlive = false; break; }
if(isAlive == false) { break; }
PosY += 1;
break;
case KeyEvent.VK_RIGHT:
if(PosX == 370) { isAlive = false; break; }
if(isAlive == false) { break; }
PosX += 1;
break;
case KeyEvent.VK_LEFT:
if(PosX == 0) { isAlive = false; break; }
if(isAlive == false) { break; }
PosX -= 1;
break;
case KeyEvent.VK_ENTER:
this.remove(L);
isAlive = true;
PosX = 185;
PosY = 125;
break;
}
repaint();
}
public void keyReleased(KeyEvent e){
}
public void keyTyped(KeyEvent e) {
}
@Override
protected void paintComponent( Graphics g ) {
g.setColor(Color.black);
g.fillRect(0, 0, this.getWidth(), this.getHeight());
if(isAlive == false) {
g.setColor(Color.red);
g.fillOval(PosX, PosY, 20, 20);
L.setText("Você perdeu, para recomeçar aperte 'ENTER'");
this.add(L);
} else {
g.setColor(Color.white);
g.fillOval(PosX, PosY, 20, 20);
}
}
}
public class Jogo extends JFrame {
public Jogo() {
this.setTitle("Jogo");
this.setSize(400, 325);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
Panel p = new Panel();
this.add(p);
}
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Jogo().setVisible(true);
}
});
}
}