好。我的问题有点令人兴奋。假设我有一个看起来像这样的构造函数:
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)(但我可能是盲目的) )。
有没有人能指出我的解决方案?哪种方式最好,我应该尝试实施哪种方式?
答案 0 :(得分:0)
您需要计算当前位置坐标与点击位置之间的差异:
double xDiff = clickPoint.x - ball.x;
double yDiff = clickPoint.y - ball.y;
然后你用与这个差异成比例的速度移动球,在你的情况下你必须设置vx
和vy
,如:
vx = xDiff * n;
vy = yDiff * n;
,n
越大,球越快到达目标。当球移动时,您需要更新xDiff
和yDiff
变量,因此当差异为0时,移动将停止。