【发布时间】:2012-06-26 03:40:56
【问题描述】:
我正在学习将 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;
}
}
}
最初,我在isTouched() 的条件中添加了补间代码,并且没有使用newX、newY 或animateOn 变量。我认为使用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(),但图形只会向触摸点略微移动。
我已经为此苦苦挣扎了几个小时,如果有人能指出我正确的方向,我将不胜感激。
谢谢。
【问题讨论】: