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

textureAtlas animation gets triggered at start of application

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

如果你想让你的动画被输入触发,你不应该一直调用这一行:

animationTime+=delta;    

因为这行代码让你的动画动起来了,建议这样:

// render
if(animationTrigger) {
animationTime+=delta; 
}

// input listener
if(input) {
animationTrigger = true;
}

flag为TRUE时会触发动画

如有问题请留言

祝你好运

动画在应用程序启动时触发的原因是因为那是您启动动画时间的时间,如果您希望它在其他时间点启动,或者只是重置它,您可以随时更改变量或直接传递一个浮点数:

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));

很高兴收到赞成票,我有点努力了:)