我有一个随机移动的图像。我的问题是每次我开始运行程序时,图像总是出现在左上角并移动一个对角线方向,在撞到墙壁后,它开始随机移动方向。每次执行或运行程序时,如何使图像显示在随机位置?任何帮助将不胜感激......
以下是代码:
public class Ball extends JPanel implements Runnable
{
private Image ball;
private Thread animator;
private int x;
private int y;
private final int DELAY = 50;
private int xVelocity = 1;
private int yVelocity = 1;
private static final int RIGHT_WALL = 400;
private static final int LEFT_WALL = 1;
private static final int DOWN_WALL = 400;
private static final int UP_WALL = 1;
private boolean showImage;
public Ball()
{
randomPosition();
setRandomDirection();
setBackground(Color.BLACK);
setDoubleBuffered(true);
ImageIcon ii = new ImageIcon(this.getClass().getResource("ball.gif"));
ball = ii.getImage();
x = y = 10;
}
public void addNotify()
{
super.addNotify();
animator = new Thread(this);
animator.start();
}
public void paint(Graphics g)
{
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(ball, x, y, this);
Toolkit.getDefaultToolkit().sync();
g.dispose();
}
public void move()
{
x += xVelocity;
y += yVelocity;
if (x >= RIGHT_WALL)
{
x = RIGHT_WALL;
randomDirection();
}
if (y <= UP_WALL)
{
y = UP_WALL;
randomDirection();
}
if (x <= LEFT_WALL)
{
x = LEFT_WALL;
randomDirection();
}
if (y >= DOWN_WALL)
{
y = DOWN_WALL;
randomDirection();
}
}
private void randomDirection()
{
double speed = 2.0;
double direction = Math.random() * 2 * Math.PI;
xVelocity = (int) (speed * Math.cos(direction));
yVelocity = (int) (speed * Math.sin(direction));
}
private 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)
{
cycle();
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();
}
}
}
答案 0 :(得分:2)
您需要的只是移动物体中x和y的设定器:
public void randomStart(){
this.x = Math.random() * this.RIGHT_WALL;
this.y = Math.random() * this.DOWN_WALL;
}
然后你从main()调用它。
答案 1 :(得分:1)
与您的randomDirection()
方法一样,您应该随机初始化图像的x和y位置:
private void randomPosition() {
x = LEFT_WALL + (int) (Math.random() * (RIGHT_WALL - LEFT_WALL));
y = UP_WALL + (int) (Math.random() * (DOWN_WALL - UP_WALL));
}
您还应该在构造函数中调用randomDirection()
方法一次,这样每次启动程序时图像都会向另一个方向移动。
所以构造函数应该如下所示:
public YourClassName() {
randomPosition();
randomDirection();
}
答案 2 :(得分:1)
您还必须随机生成初始值。
其实你总是采取:
private int x, y;
private int xVelocity = 1;
private int yVelocity = 1;
所以x == 0
,y == 0
,xVelocity == 1
和yVelocity == 1
作为变量的静态初始值。
答案 3 :(得分:0)
Random r = new Random()
public Ball()
{
randomPosition();
setRandomDirection();
setBackground(Color.BLACK);
setDoubleBuffered(true);
ImageIcon ii = new ImageIcon(this.getClass().getResource("chicken.gif"));
ball = ii.getImage();
this.x = r.nextInt();
this.y = r.nextInt();
}