我正在学习将 libgdx 与 Universal-tween-engine 一起使用,但无法弄清楚如何触摸(或单击桌面应用程序)屏幕上的一个点并让纹理一直移动到触摸的位置在到达终点之前不保持触摸或单击处于活动状态。
当触摸事件启动时,动画开始并且图形向该位置移动。如果启动触摸和拖动,图形将跟随手指/鼠标指针。如果我触摸一个点,图形将向该点移动,直到触摸被释放。然后它在释放触摸时停止。
我正在寻找触摸和释放并将该图形移动到触摸点,并且可能不了解有关补间引擎实现的某些内容。我在下面粘贴了补间代码。
public void render() {
camera.update();
batch.setProjectionMatrix(camera.combined);
batch.begin();
batch.draw(texture.getTexture(), texture.getBoundingBox().x, texture.getBoundingBox().y);
batch.end();
Tween.registerAccessor(Plane.class, new TextureAccessor());
TweenManager planeManager = new TweenManager();
float newX = 0;
float newY = 0;
boolean animateOn = false;
if(Gdx.input.isTouched()) {
newX = Gdx.input.getX();
newY = Gdx.input.getY();
animateOn = true;
}
if (animateOn == true && (texture.getX() != newX || texture.getY() != newY)) {
Tween.to(texture, TextureAccessor.POSITION_XY, 10)
.target(newX, newY)
.ease(TweenEquations.easeNone)
.start(planeManager);
planeManager.update(1);
if (texture.getX() == newX && texture.getY() == newY) {
animateOn = false;
}
}
}
最初,我在条件 for 中有补间代码isTouched()
,没有使用newX
, newY
oranimateOn
变量。我认为使用isTouched()
只设置新的坐标和动画状态会使循环触发补间。旧代码如下所示:
if(Gdx.input.isTouched()) {
newX = Gdx.input.getX();
newY = Gdx.input.getY();
Tween.to(texture, TextureAccessor.POSITION_XY, 10)
.target(newX, newY)
.ease(TweenEquations.easeNone)
.start(planeManager);
planeManager.update(1);
}
我也尝试过使用justTouched()
,但图形只会向触摸点略微移动。
我已经为此苦苦挣扎了几个小时,如果有人能指出我正确的方向,我将不胜感激。
谢谢。