我正在尝试动画从侧面移动的标题 - 一个Vector2保持其预期的最终位置,另一个保持其偏离该位置(偏移量(0,0)表示动画已完成)。我的调试调用显示文本到达最终位置,但是Universal Tween Engine由于某种原因立即将偏移量的值设置为(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行左右,直到动画结束。有没有人在我的代码中看到任何会导致此错误的错误?任何帮助将不胜感激。
答案 0 :(得分:0)
好吧,我想出来了 - 事实证明问题出现在我没有提供的一段代码中 - 用于与补间引擎接口的Vector2Accessor类。作为对其他TweenEngine用户的警告,请不要重新初始化放置所访问值的数组。