如何移动对象" X"和" Y"方向

时间:2018-02-12 21:01:37

标签: android math canvas geometry

我正在研究android studio,我想创建投掷对象的效果,在这种情况下是在画布上绘制的圆圈。但我遇到了问题。有人可以指导我吗?

我采取" X"而且" Y"用户触摸的值,但是如何让圆圈朝那个方向移动?

由于

游戏课程:

<form class="form-horizontal" th:object="${personForm}">
    <div th:each="person,status : ${personForm.persons}" class="form-group" >
        <label>Name</label><input th:field="*{persons[__${status.index}__].name}" />
        <label>Age</label><input th:field="*{persons[__${status.index}__].age}" />
    </div>

    <button type="submit" class="btn btn-default">Submit</button>
</form>

}

enter image description here

4 个答案:

答案 0 :(得分:2)

在某处需要x+=speedXy+=speedY,以便x或y值发生变化,从而导致球移动。如果你试图在那里实现一些物理,你需要一些数学。

答案 1 :(得分:0)

您需要一种方法来以某个间隔更改(x,y)值。您可以使用Timer类执行此操作,但随后会遇到一些困难的多线程代码。我建议使用OpenGL ES或更高级别的库,如LibGDX。这两个都提供了一个事件循环,允许您更新将被绘制的对象。

答案 2 :(得分:0)

基本上你想用一些恒定的速度将圆圈移动到用户触摸屏幕的位置?

如果你只想移动一个圆圈,那么Timer可以做到 - 或者你可以使用类似的东西:https://github.com/MasayukiSuda/FPSAnimator

最后,您是否一直在寻找线性直线恒速运动?那你的数学就好了。如果您正在寻找具有重力等的东西,那么您可以参考:https://developer.android.com/guide/topics/graphics/physics-based-animation.html并考虑这一点:https://github.com/google/liquidfun

答案 3 :(得分:0)

这会将圆圈精确地移动到用户触摸的点:

theta = atan2(touchY - y,touchX - x)
speedX = cos(theta)
speedY = sin(theta)
x += speedX
y += speedY

一旦圆到达该点,将发生什么取决于计算的实现方式。如果希望圆继续沿其路径移动并无限地移动方向,则必须只计算一次x和y的速度。这样,将始终使用相同的x和y速度来更新圆的位置。

如果每次要更新圆的位置时都重新计算速度,则圆即使在技术上已经到达圆点也将连续移动到该点,并且必须手动停止。

可以通过将速度乘以大于1的值来增加速度。要保持正确的方向,两个速度的值应相同。

示例:

theta = atan2(touchY - y,touchX - x)
speedX = maxSpeed*cos(theta)
speedY = maxSpeed*sin(theta)
x += speedX
y += speedY