这个问题一直困扰着我一段时间,我想知道我是否缺少一种方法或某种东西。此图像可能最好地解释了我的问题
因此,我找到了一些链接的帮助,并制定了自己的解决方案。
首先,我使用一些Trig使用其当前旋转来计算要从图像的x和y中减去/减去多少。两者之间的比例是产生方向移动效果的原因。
final double rise = Math.toDegrees( Math.sin(toRadians(YOU.getRotation())) )*SPEED;
final double run = Math.toDegrees( Math.cos(toRadians(YOU.getRotation())) )*SPEED;
然后,我使用定时循环并添加x和y集
(new Thread(new Runnable()
{
@Override
public void run()
{
for (int x=0; x<600; x++) {
try {
Thread.sleep(6);
runOnUiThread(new Runnable() thread
{
@Override
public void run() {
YOU.setX((float) (YOU.getX() + run)); //pay attention here
YOU.setY((float) (YOU.getY() + rise));//pay attention here
}
});
} catch (InterruptedException e) {
// ooops
}
}
}
})).start();
}
请注意,我是如何将for循环与其他代码结合使用的,应该注意,这不是必需的,但是我将其用于我的特定需求。如果您愿意,可以放一个while循环而不是for循环,但这部分
YOU.setX((float) (YOU.getX() + run));
YOU.setY((float) (YOU.getY() + rise));
是加/减x和y的代码。
而且,andSPEED
声明中的变量设置为0.02(此处未显示),因为我通过循环添加x和y使其看起来更加平滑。这里的数字越大(每次添加),它就越远,但它不会影响前倾角的精度。尽管我建议至少在其中添加一个补码。rise
run
这是我的原始代码,全部放在一个地方,以备您需要时使用。
public void moveloop(){
final double rise = Math.toDegrees( Math.sin(toRadians(YOU.getRotation())) )*SPEED;
final double run = Math.toDegrees( Math.cos(toRadians(YOU.getRotation())) )*SPEED;
(new Thread(new Runnable()
{
@Override
public void run()
{
for (int x=0; x<600; x++) {
try {
Thread.sleep(6);
runOnUiThread(new Runnable() thread
{
@Override
public void run() {
YOU.setX((float) (YOU.getX() + run));
YOU.setY((float) (YOU.getY() + rise));
}
});
} catch (InterruptedException e) {
// ooops
}
}
}
})).start();
}
有用的网址:
https://math.stackexchange.com/questions/142073/calculate-new-graph-point-with-coordinate-and-angle
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句