Java 如何在Libgdx中制作与Flappy Bird类似的动画?
我正在创建一个类似于flappy bird的游戏,在这个游戏中,鸟只在触摸屏幕时拍打翅膀,但在触摸屏幕时激活动画时遇到问题Java 如何在Libgdx中制作与Flappy Bird类似的动画?,java,libgdx,Java,Libgdx,我正在创建一个类似于flappy bird的游戏,在这个游戏中,鸟只在触摸屏幕时拍打翅膀,但在触摸屏幕时激活动画时遇到问题 batch.draw(animation.getKeyFrame(myTimeState, false), x, y); //the myTimeState is 0 to render the 1st frame only. 然后,当触摸屏幕时,我会执行以下操作: //myTimeStep is just basically a controllable timeSta
batch.draw(animation.getKeyFrame(myTimeState, false), x, y); //the myTimeState is 0 to render the 1st frame only.
然后,当触摸屏幕时,我会执行以下操作:
//myTimeStep is just basically a controllable timeState for the animation only
if(Gdx.input.justTouched){
myTimeState = timeState;
}else if(Gdx.input.justTouched == false && animation.isAnimationFinished(timeState)){
myTimeState = 0;
}
我认为动画无法播放所有帧,因为完成触摸屏幕后myTimeStep立即变为0。我也不认为这是正确的做法,如果你们有更好的想法或解决方案,请帮助。提前感谢。实现这一点可能有几种方法。当然,您需要增加时间状态,这还取决于动画的长度以及是否要循环
如果您创建的动画仅播放一次,然后停止(直到再次触摸屏幕),则只需在触摸屏幕时将myTimeState设置为0,然后每帧递增一次。动画将运行,然后在到达终点时自行“停止”(正如您所说的“无循环”)。下次有人触摸屏幕时,myTimeState将设置回0,动画将再次开始 实现这一点可能有几种方法。当然,您需要增加时间状态,这还取决于动画的长度以及是否要循环
如果您创建的动画仅播放一次,然后停止(直到再次触摸屏幕),则只需在触摸屏幕时将myTimeState设置为0,然后每帧递增一次。动画将运行,然后在到达终点时自行“停止”(正如您所说的“无循环”)。下次有人触摸屏幕时,myTimeState将设置回0,动画将再次开始 首先,必须确保动画的播放模式设置为animation.playmode.NORMAL。这是一个默认设置,但如果您将其设置为循环,则不会按预期工作 其次,在这种情况下,我不会使用Input.justTouch()。相反,输入处理器中的侦听器非常适合。这里有一个Stage的例子。如果您不知道什么是输入处理器,下面是关于和的教程 您可以根据动画的结果选择要显示的内容(动画的关键帧或精灵)。isAnimationFinished() 我没有检查它,但有一种可能性,这可能会导致剪切最后一帧,因为一旦显示,animation.isAnimationFinished()将返回true。我可能错了,所以你得检查一下。如果出现问题,可以添加精灵作为动画的最后一帧。当动画结束时,它在最后一帧上闪烁,这将是您的静态精灵 在这两种情况下,您将在游戏开始时播放动画,因为timeStep等于0。我看到两种解决方案,建议您采用第二种:
- 初始化为false
- 在单击侦听器中设置为true
- 在isAnimationFinished()期间设置为false,仅当isAnimationPlayed为true时,才会调用每个帧
- 在draw()方法中用于确定要显示的内容
首先,必须确保动画的播放模式设置为animation.playmode.NORMAL。这是一个默认设置,但如果您将其设置为循环,则不会按预期工作 其次,在这种情况下,我不会使用Input.justTouch()。相反,输入处理器中的侦听器非常适合。这里有一个Stage的例子。如果您不知道什么是输入处理器,下面是关于和的教程 您可以根据动画的结果选择要显示的内容(动画的关键帧或精灵)。isAnimationFinished() 我没有检查它,但有一种可能性,这可能会导致剪切最后一帧,因为一旦显示,animation.isAnimationFinished()将返回true。我可能错了,所以你得检查一下。如果出现问题,可以添加精灵作为动画的最后一帧。当动画结束时,它在最后一帧上闪烁,这将是您的静态精灵 在这两种情况下,您将在游戏开始时播放动画,因为timeStep等于0。我看到两种解决方案,建议您采用第二种:
- 初始化为false
- 在单击侦听器中设置为true
- 在isAnimationFinished()期间设置为false,仅当isAnimationPlayed为true时,才会调用每个帧
- 在draw()方法中用于确定要显示的内容
您可以将
时间状态设置为动画的持续时间。您可以将时间状态设置为动画的持续时间。我不确定是否理解。你想只在触摸屏时播放动画,并在触摸屏时停止吗?不,但我的代码就是这样,我想要的是像飞鸟一样的东西,当触摸屏时,飞鸟拍打翅膀,然后动画就只是一个普通的精灵。我不确定我是否理解。你想让动画只在触摸屏时播放,并在触摸屏时停止?不,但我的代码就是这样,我想要一个像飞鸟一样的东西,当触摸屏时,飞鸟拍动翅膀,然后在动画结束后,它就是一个普通的精灵。你是什么意思?例如,每个帧渲染为0.33,所以我应该执行timeState=0.33?但是,时间状态为ne
stage.addListener(new ClickListener() {
@Override
public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
if(button == Input.Buttons.LEFT) {
timeState = 0;
}
return super.touchDown(event, x, y, pointer, button);
}
});
if(animation.isAnimationFinished(timeState)) {
//draw some sprite
} else {
//draw animation keyframe
}