我正在编写各种游戏来练习编程,我遇到过这个问题。在我的游戏中,屏幕上有圆圈。当用户点击屏幕时,圆圈应远离点击。我有按下鼠标按钮的点的x和y位置,我有每个cicle对象的x和y位置。
我找到了圆圈的中心,其中包含以下代码
float cx = circle.getX()+circle.getRadius();
float cy = circle.getY()+circle.getRadius();
为了找到从圆边到鼠标点击的距离,我做了这个
float distance = (float) Math.sqrt( ((cx-x)*(cx-x)) + ((cy-y)*(cy-y)) ) - circle.getRadius();
现在,在检查圆是否足够接近点击后,如何将1f的速度分割为圆的变量vx和vy?
编辑:其实我想要加速,但我猜它都是一样的。
答案 0 :(得分:5)
这听起来像是sin
中的cos
和java.lang.Math
http://download.oracle.com/javase/6/docs/api/java/lang/Math.html的作业。
知道总速度(上例中的1f
)和角度(弧度)后,速度的水平分量为v * cos(angle)
,垂直分量为{{1} }。
如果你想将它移开,你可能需要否定角度。
要计算水平和垂直距离的角度,请使用v * sin(angle)
。
顺便说一句,如果你不想采取不必要的平方根,并希望避免计算三联系函数的计算系列成本,请查看http://www.youtube.com/user/njwildberger#p/u/368/9wd0i44vK04。
答案 1 :(得分:1)
找到从鼠标到圆心的线,这应该是“力”向量。这个向量将为您提供方向,现在您只需要弄清楚距离如何影响幅度。
答案 2 :(得分:0)
你可以先找到迈克建议的角度并使用cos和sin函数。
或使用:
velHoriz = velocity * (cx-x) / distance
velVert = velocity * (cy-y) / distance