如何使我的图像随机移动?

时间:2011-10-19 04:57:43

标签: java

我的图像以逆时针方向旋转。现在,我希望它在触摸墙壁期间或随时随地移动。问题是我不能这样做,请帮我解决这个问题。

这是我的代码:

private double x;
private double y;
private double speed;

public void move(long dt)
{
    double dt_s = dt / 1e9;
    double dx = speed * dt_s;
    double dy = speed * dt_s;

    final double right_border = 100;
    final double up_border = 100;
    final double down_border = 0.0;
    final double left_border = 0.0;


    x += dx;

    if (x >= right_border)
    {
        x = right_border;
      if (y >= down_border)
       {               
    y += dy;
       }

    }
    if (y > up_border)
    {
        y = up_border;
        if (x >= left_border)
        {
            speed *= -1;
        }

    }
    if (x <= left_border)
    {
        x = left_border;
        if (y <= up_border)
        {
            y += dy;
        }

    }
    if (y < down_border)
    {
        y = down_border;
        if (x <= right_border)
        {
            speed *= -1;
        }

    }

 }

2 个答案:

答案 0 :(得分:2)

这是一种可能的解决方案。

在其中一个边界(图像刚刚碰到的边界除外)上生成随机点(x,y),并使图像朝向该点移动。你所要做的就是找到刚刚击中的点P1(x1,y1)与刚生成P2(x2,y2)的随机点之间的斜率。使用斜率你可以找到线的方程,它必须进入。你已经完成了!!

答案 1 :(得分:2)

首先,你必须解决你的班级无方向的问题 - 你有速度,但你的方向固定在东北45度(增量x和y相同)。

按如下方式向班级添加方向:

...
private double speed;
private double angle; // in radians - makes math easier

public void move(long dt) {
    ...
    double dx = speed * dt_s * Math.sin(angle);
    double dy = speed * dt_s * Math.cos(angle);
    ...

现在向随机方向前进:

myObject.setAngle(Math.PI * 2 * Math.random()); // Math.PI * 2 = 360 degrees

如果击中墙壁,则必须将角度限制在与正在击中的墙壁远离的角度。我会把它留给你,但它将采取以下形式:

myObject.setAngle(minAngle + ((maxAngle - minAngle) * Math.random()));