我的问题是textureAtlas动画在应用程序启动时运行。我只希望在inputListner获取正确的输入时触发它,而不是在启动时触发。目前它会被触发两次。什么错过了?这是我的代码。
//show method
animationTime=0;
atlas= new TextureAtlas("Atlas/animation.atlas");
regions= new Array<TextureAtlas.AtlasRegion>(Atlas.getRegions());
animation= new Animation(1f/31f,regions);
//input listener:
animationTime = 0;
animation.setPlayMode(Animation.PlayMode.NORMAL);
//render method:
animationTime+=delta;
decal.setTextureRegion(animation.getKeyFrame(animationTime));
答案 0 :(得分:2)
如果您希望通过输入触发动画,则不应始终调用此行:
animationTime+=delta;
导致这行代码使动画移动,建议:
// render
if(animationTrigger) {
animationTime+=delta;
}
// input listener
if(input) {
animationTrigger = true;
}
当标志为TRUE
时,将触发动画如果有任何问题发表评论
祝你好运答案 1 :(得分:1)
动画在应用程序启动时被触发的原因是因为当你开始动画时间时,如果你想让它在某个其他时间点启动,或者只是重置它,你可以总是更改变量或直接传递浮点数:
if(animationContinue) {
animationTime+=delta;
}
if(animationReset) {
animationTime = 0;
}
// Applying animation using the animation time variable.
decal.setTextureRegion(animation.getKeyFrame(animationTime));
// Will just return the first frame of the animation
decal.setTextureRegion(animation.getKeyFrame(0));
// Note that 1 won't necessarily return the next animation frame
正如您所看到的,动画时间是完全动态的,与动画本身是分开的。
如果您计划将一个动画用于多个游戏对象,例如飞行的鸟类,请确保为每个游戏对象动画时间添加一些随机偏移,这将使每个游戏对象更加独特且更加可信。
否则,它们将具有相同的精确动画时序和顺序,从而产生真正的人工外观。
请注意,动画时间变量是动态的,并且与动画本身完全分开,因此,您可以这样做:
// For each bird.
bird.setTextureRegion(animation.getKeyFrame(animationTime+randomOffset));
很乐意欣赏一个upvote,我有点在这里努力:)