浮球位置设置(vector2d?)

时间:2015-09-11 15:37:50

标签: java android collision

好。我的问题有点令人兴奋。假设我有一个看起来像这样的构造函数:

  public Ball(Random r, float halfphonewidth, float halfphoneheight, float cx, float cy){
    //te wartosci odpowiadaja za losowe polozenie i losowe wektory
    x = (halfphonewidth-48)*0.1f;
    y = (halfphoneheight-48)*0.1f;
    vx = -0.2f + r.nextFloat();
    vy = -0.2f + r.nextFloat();

    Log.i("", "\n\n" + this.vx + "  " +this.vy+"\n\n");
    health = 3;
}

现在让我们说我在某处声明了一个step()方法 - 它有效。步骤:

 public void step(){
    x += vx;
    y += vy;

    if(x<2f || x > 98f)
        vx =- vx;


    if(y<2f || y > 98f)
        vy =- vy;
}

我有一个onTouch事件,可以侦听和检查'click coords'。我抓住它们并传递给构造函数(float cx,float cy)。

球的第一个位置是静态的 - 我在构造函数中永久设置它并移动48个像素(图像大小的原因)。它从底部中心开始浮动到随机方向+当它与墙壁碰撞时它会反转它的vx&amp; VY。

原来如此!我需要将球指向我点击的方向! :d 我尝试通过使用坐标系统缩放屏幕w / h,尝试实现Vector2D类(因为我认为它在最新的java中缺失)但我对线性代数不太好,尝试用trygonometry(甚至是cyclometry)(但我可能是盲目的) )。

有没有人能指出我的解决方案?哪种方式最好,我应该尝试实施哪种方式?

1 个答案:

答案 0 :(得分:0)

您需要计算当前位置坐标与点击位置之间的差异:

double xDiff = clickPoint.x - ball.x;
double yDiff = clickPoint.y - ball.y;

然后你用与这个差异成比例的速度移动球,在你的情况下你必须设置vxvy,如:

vx = xDiff * n;
vy = yDiff * n;

n越大,球越快到达目标。当球移动时,您需要更新xDiffyDiff变量,因此当差异为0时,移动将停止。