【发布时间】:2014-03-15 21:42:25
【问题描述】:
我正在尝试为从侧面移动的标题设置动画 - 一个 Vector2 保持其预期的最终位置,另一个保持其与该位置的偏移量((0, 0) 的偏移量表示动画已完成)。我的调试调用显示文本到达最终位置,但通用补间引擎出于某种原因立即将偏移值设置为 (0, 0),而不是补间。下面的代码和调试语句:
TweenManager 的初始化:
public void show()
{
...
//Set up tween manager
tweenManager = new TweenManager();
Tween.registerAccessor(Button.class, new ButtonTweenAccessor());
Tween.registerAccessor(Vector2.class, new Vector2TweenAccessor());
}
开始动画:
public void showLevel(int levelNumber)
{
previewTitle = levels[levelNumber].getTitle();
previewTitlePos.y = GameConstants.getVirtualHeight() - this.TITLE_SPACE;
previewTitlePos.x = (GameConstants.getVirtualWidth() / 2) - (font.getBounds(previewTitle).width / (2f * GameConstants.getPpuX()));
titleOffset = new Vector2(GameConstants.getVirtualWidth(), 0);
Gdx.app.log("Offset before anim starts:", previewTitlePos.toString());
Tween.to(titleOffset, Vector2TweenAccessor.VALUE, 1)
.target(.10f, 0.1f)
.start(tweenManager);
Gdx.app.log("Offset after tween.to is called:", previewTitlePos.toString());
}
VirtualWidth 是游戏内部分辨率中窗口的宽度。我将偏移量设置为此值最初是为了将文本“隐藏”到屏幕右侧一屏长度。
然后是渲染方法:
public void render(float delta)
{
spriteBatch.begin();
if(!previewTitle.isEmpty())
{
font.draw(spriteBatch, previewTitle, (previewTitlePos.x + titleOffset.x) * GameConstants.getPpuX(), (previewTitlePos.y + titleOffset.y) * GameConstants.getPpuY());
Gdx.app.log("Offset", titleOffset.toString());
}
spriteBatch.end();
tweenManager.update(delta);
}
(我将坐标乘以 PpuX 和 PpuY 值以实现分辨率无关性 - 我正在使用映射到实际窗口分辨率的单个虚拟分辨率)。
调试输出:
动画开始前的偏移量:: [19.0:0.0]
调用 tween.to 后的偏移量:: [19.0:0.0]
偏移量:[19.0:0.0]
偏移量:[0.0:0.0]
偏移量:[0.0:0.0]
偏移量:[0.0:0.0]
偏移量:[0.0:0.0]
偏移量:[0.0:0.0]
偏移量:[0.0:0.0]
偏移量:[0.0:0.0]
等等。再画 40 行左右,直到动画结束。有人在我的代码中看到任何会导致这种情况的错误吗?任何帮助将不胜感激。
【问题讨论】:
标签: java animation libgdx tween