我正在研究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>
}
答案 0 :(得分:2)
在某处需要x+=speedX
或y+=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