如何在libGDX中限制捏合缩放?

3

我一直在尝试解决CameraInputController的pinch缩放问题。我希望它可以在原点放大和缩小,但限制在3到10之间。我在zoom()函数中加入了以下代码:

public boolean zoom (float amount) {
if(camera.position.len() < 3 && amount > 0)
{
    return  false;
}
if(camera.position.len() > 10 && amount < 0)
{
    return false;
}
if (!alwaysScroll && activateKey != 0 && !activatePressed)
    return false;
Gdx.app.log("zoom", amount + "");
camera.translate(tmpV1.set(camera.direction).scl(amount));
if (scrollTarget)
    target.add(tmpV1);
if (autoUpdate)
    camera.update();
return true;

如果我只调用缩放函数(例如缩放按钮),那么这个功能可以正常工作,但是当我使用捏合手势进行缩放时,相机可以缩小到3倍以上,而在缩小时,当相机接近10倍时相机会跳动得非常剧烈。奇怪的是,如果我不设定这些边界,捏合缩放会非常平滑。

如果我输出amount变量,则捏合缩放会给我一系列数字,例如缩小时:

-3.4762511    
3.425479
-3.386308
3.353984

当进行缩放时,会出现这种情况:

3.6231816
-3.553997
3.8673449
-3.81199

当我查看CameraGestureListener中的zoom()函数时,其中的amount值也在大量变化。如果我查看pinch()函数,那么每次调用它时,pointer2位置会在第一和第二个手指的位置之间交替变化。
这可能是一个错误吗?有没有人知道发生了什么?我该如何解决这个问题?

你能发布一个演示项目吗?我无法重现这个问题。 - pr0gramist
1个回答

0

我自己解决了!原来如果你只是在render()函数中检查相机位置并将其移动到所需位置,而不是在相机控制器内的监听器中移动它,那么一切都能正常工作。我想我有点过于复杂化了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接