Loops XNA格斗游戏风格动画循环问题
我已经为此工作了相当长的一段时间,在不同的地方寻找解决方案。我使用了尼克·格雷夫林(Nick Gravelyn)的风格,将动画存储到文本文件中,并简单地增加一个索引来更改帧。我遇到的麻烦是循环动画一次,而且只能循环一次,但由于某种原因,我知道应该工作的方式并没有像我想象的那样工作。我一辈子都不知道为什么,除非它非常具体地说明XNA是如何工作的 这是我的密码: 私有void UpdateAttackKeyboardState当前,KeyboardState上次,游戏时间游戏时间 { 如果当前.IsKeyDownKeys.S&&last.IsKeyUpKeys.S { 中性耐受踢球时间; } } 私有void neutralStandingKickGameTime游戏时间 { //TimesInclastFrame+=gameTime.ElapsedGameTime.millizes;//帧速率控制 //如果TimesInclastFrame>毫秒SperFrame//帧速率控制 //{ //TimesInclastFrame-=毫秒SperFrame;//帧速率控制 如果mCurrentState!=State.Kicking { mCurrentState=State.Kicking; 位置Y=200; loopOnce25,30;//从第25帧开始,到第30帧结束 } //} } 私有void loopOnceint最小值,int最大值 { 如果currentImageIndex>max | | currentImageIndexLoops XNA格斗游戏风格动画循环问题,loops,xna,Loops,Xna,我已经为此工作了相当长的一段时间,在不同的地方寻找解决方案。我使用了尼克·格雷夫林(Nick Gravelyn)的风格,将动画存储到文本文件中,并简单地增加一个索引来更改帧。我遇到的麻烦是循环动画一次,而且只能循环一次,但由于某种原因,我知道应该工作的方式并没有像我想象的那样工作。我一辈子都不知道为什么,除非它非常具体地说明XNA是如何工作的 这是我的密码: 私有void UpdateAttackKeyboardState当前,KeyboardState上次,游戏时间游戏时间 { 如果当前.Is
它将在按住键盘键s时循环动画。但它不会像预期的那样在一次按键中循环所有7帧 据我所知,您发布的代码将只绘制踢腿动画的最后一帧,因为LoopOnce方法中的for循环会围绕所有帧循环,并且只绘制最后一帧。这是因为每次更新都会调用draw方法一次 XNA首先调用update方法,然后调用draw。因此,在更新方法中,将动画的当前帧设置为最大帧,然后进入绘制方法,在该方法中绘制当前帧,此时是最后一帧 为了实现这一点,对于每次要更新的调用,只需将要绘制的帧增加1 我没有XNA在这台计算机上,所以我不能测试它,它可能不会编译没有修复任何语法错误,但给你一个想法,像这样的东西应该这样做
private void UpdateAttack(KeyboardState current, KeyboardState last, GameTime gameTime)
{
if (current.IsKeyDown(Keys.S) && last.IsKeyUp(Keys.S))
{
mCurrentState =State.Kicking;
currentImageIndex=25;
}
if(mCurrentState ==State.Kicking)
neutralStandingKick(gameTime);
}
private void neutralStandingKick(GameTime gameTime)
{
currentImageIndex++;
if(currentImageIndex==30) mCurrentStart = State.SomeOtherState;
}
删除“一次绘制”方法。您需要将State.SomeOtherState替换为对象未启动时所处的状态。您可能还想用常量交换硬编码的帧编号。要使此动画正常工作,不需要更改绘制方法。希望这有帮助。什么不起作用?它是不止一次循环还是一次不循环
我很抱歉没有具体说明。问题是,当按下该键时,它不会使用for循环在帧之间循环。相反,它只显示冻结到位的动画的1帧。可能,最后一帧,正如你在下面所说的。让我把这个类中的draw方法很快贴出来。我对问XNA相关的问题有点陌生。X_X;好的,我明白你的意思。真不敢相信我错过了这个。我在想我可以使用for循环来完成踢腿动画的X帧数量。我忘记了每个循环只调用一次update方法,因此for循环中只有一帧被传递到draw方法。谢谢你的帮助,我会找到一个不同的方法来处理这个问题!我试过你说的话,从理论上看似乎是可行的,但由于某些原因,它不会自动起作用。我会把修改过的代码贴上去。它应该在一个按键上循环总共7帧,但它不是。编辑:我可以按住键盘按钮,它将正确循环动画,但不会自动循环。我可以看到两种情况:1-您正在其他地方设置mCurrentState。也许用你的画法?在动画结束之前,将状态设置为非踢的状态。2-或者,问题是UpdateAttack仅在按下kick按钮时才被缩放。你能发布调用UpdateAttack方法的代码吗?是的,让我帮你准备一下。