Я пытаюсь сделать изображение перемещаться случайным образом, но он почему-то не работает. Изображение появляется на панели, но оно не перемещается. Для этого я использую классы буксировки: основной класс и подкласс. Это код для моего подкласса.Попытка сделать изображение перемещается случайным образом, но оно не движется
public Image()
{
randomPosition();
try {
image = ImageIO.read(new File("image.png"));
} catch (IOException e) {}
}
public void paint(Graphics g)
{
g.drawImage(image, x, y, this);
Toolkit.getDefaultToolkit().sync();
g.dispose();
}
public void move()
{
x += dx;
y += dy;
if (x >= 550) {
x = 550;
randomDirection();
}
if (x <= 1) {
x = 1;
randomDirection();
}
if (y >= 350) {
y = 350;
randomDirection();
}
if (y <= 1) {
y = 1;
randomDirection();
}
}
public void randomDirection() {
double speed = 2.0;
double direction = Math.random()*2*Math.PI;
dx = (int) (speed * Math.cos(direction));
dy = (int) (speed * Math.sin(direction));
}
public void randomPosition()
{
x = LEFT_WALL + (int) (Math.random() * (RIGHT_WALL - LEFT_WALL));
y = UP_WALL + (int) (Math.random() * (DOWN_WALL - UP_WALL));
}
public void run()
{
long beforeTime, timeDiff, sleep;
beforeTime = System.currentTimeMillis();
while (true)
{
move();
repaint();
timeDiff = System.currentTimeMillis() - beforeTime;
sleep = DELAY - timeDiff;
if (sleep > 2)
{
sleep = 1;
}
try
{
Thread.sleep(sleep);
}
catch (InterruptedException e)
{
System.out.println("interrupted");
}
beforeTime = System.currentTimeMillis();
}
}
и это мой главный класс, где я начинаю тему:
public void addImage(){
Image I = new Image();
x = panel.getGraphics();
I.paint(x);
Thread thr=new Thread(I);
thr.start();
}
Не вызывайте 'getGraphics()'. Это не сработает и будет отменено после того, как менеджер по перекраске решает раскрасить. Вместо этого используйте 'paintComponent (Graphics)' и обязательно вызовите super! – Obicere
Имена переменных не должны начинаться с символа верхнего регистра. Кроме того, имена переменных должны иметь смысл. Почему вы используете «I», это не соответствует ни одному из приведенных выше рекомендаций. – camickr