W paint
musisz czyścić poprzedni ekran (metoda Graphics.clearRect
). Dobrze byłoby do tego dodać double-buffering, żeby prostokąt nie migał przy przerysowaniu.
Zrobione, ładnie porusza platformą, na horyzoncie pojawił się następny problem:
stworzyłem wątek, chciałem, aby zmieniało w nim pozycję X, a następnie repaint().
Ball.java
package main;
public class Ball extends Thread implements Runnable{
int x = 0;
int y = 0;
Main main;
public static void main(String[] args){
new Ball(new Main());
}
public Ball(Main m){
start();
main = m;
}
public int getX()
{
return x;
}
public int getY()
{
return y;
}
public void run() {
while(true){
x+=1;
main.repaint();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
Metoda paint w Main.java
public void paint(Graphics g){
g.clearRect(0, 0, getSize().width, getSize().height);
g.setColor(Color.white);
g.drawRect(p.getX(), p.getY(), 10, 50);
g.fillRect(p.getX(), p.getY(), 10, 50);
g.drawOval(b.getX(), b.getY(), 10, 10); //Ball y
}
Ładnie przerysowuje, jednak dopiero, gdy wcisnę przycisk od przesuwania platformy.
Player.java
package main;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class Player implements KeyListener{
int width, height;
int x = 0;
int y = 0;
Main main;
public static void main(String[] args){
}
public Player(Main m){
width = 10;
height = 50;
main = m;
}
public int getX(){
return x;
}
public int getY(){
return y;
}
public void keyPressed(KeyEvent e) {
Main m = new Main();
int key = e.getKeyCode();
if (key == KeyEvent.VK_UP) {
y-=10;
main.repaint();
}
if (key == KeyEvent.VK_DOWN) {
y+=10;
main.repaint();
}
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
}