[英]LibGDX Image rotation issue
当我旋转图像(图像类)时,我需要帮助解决一个小问题。
这个想法是旋转一个球面图像,移动是通过手指的触摸和拖动,可能是或不是顺时针,到目前为止这工作正常。
我希望当球体的角度是 90 的倍数时发生一些事情,问题是当我用手指旋转球体时,有时它是如此之快以至于球体的角度并不总是通过 90 的倍数,例如,如果它在 87,当我移动手指时,它会在不接触 90 的情况下到达 94。
这是我通过拖动旋转的代码
tapeImage.addListener(new DragListener() {
int initDegree;
@Override
public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
initDegree = (int) new Vector2(x, y).sub(new Vector2(tapeImage.getOriginX(), tapeImage.getOriginY())).angle();
return true;
}
@Override
public void touchDragged(InputEvent event, float x, float y, int pointer) {
int touchDegree = (int) (new Vector2(x, y).sub(new Vector2(tapeImage.getOriginX(), tapeImage.getOriginY()))).angle();
tapeImage.rotateBy(touchDegree - initDegree);
}
});
我知道捕获这个的最好方法是将旋转增加 1 但这不会跟随手指速度,所以我想知道是否有更好的方法来捕获旋转事件,感谢您的帮助。
更新
情况:(灰色球体是黄色球体当前角度的表示)我顺时针转动黄色表盘,当黄色球体的角度是90的倍数时,会发生事件x,您可以继续旋转球体当事件发生时,如果你继续转动,你将到达下一个 90 的倍数,在那里同样的事件将再次发生,我使用 rotateBy 方法为对象的当前角度增加一个角度,问题是如果我将球体移动得太快,它的角度会跳跃,从而阻止它达到 90 的倍数,正如我之前所说,这可以通过简单地增加 1 以 1 来纠正,但球体会比我的手指慢得多。
我需要的是,无论您移动球体的速度有多快,当球体的角度看着这 4 个边之一时,事件都会发生,也许使用 90 的倍数检测它并不是知道哪一边的最佳方法角度打开,或者我应该使用rotateBy以外的方法?
建议你把之前的角度存起来,对比一下之前的和新的角度,看是否过了90的倍数:
int previousDegree = 0;
@Override
public void touchDragged(InputEvent event, float x, float y, int pointer) {
int touchDegree = (int) (new Vector2(x, y).sub(new Vector2(tapeImage.getOriginX(), tapeImage.getOriginY()))).angle();
tapeImage.rotateBy(touchDegree - initDegree);
if(previousDegree < 90 && tapeImage.getRotation() >= 90) {
// 90 degrees passed, put code
} else if (previousDegree < 180 && tapeImage.getRotation() >= 180) {
// 180 degrees passed, put code
} else if (previousDegree < 270 && tapeImage.getRotation() >= 270) {
// 270 degrees passed, put code
} else if (previousDegree < 360 && tapeImage.getRotation() >= 360) {
// 360 degrees passed, put code
}
previousDegree = touchDegree;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.