textureAtlas动画在应用程序启动时触发

时间:2016-01-05 13:24:24

标签: libgdx texture-atlas

我的问题是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));

2 个答案:

答案 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,我有点在这里努力:)