以下是我的Player类的更新方法:
timer += (float)gameTime.ElapsedGameTime.TotalMilliseconds;
KeyboardState state = Keyboard.GetState();
if (state.IsKeyDown(Keys.Up)) {
if (currentFrame < 7) currentFrame = 7;
if (timer >= delay) {
if (currentFrame < 13) {
currentFrame++;
}
else if (currentFrame == 13) {
currentFrame = 7;
}
timer = 0;
}
}
else {
if (currentFrame > 7) currentFrame = 1;
if (timer >= delay) {
if (currentFrame < 6) {
currentFrame++;
}
else if (currentFrame == 6) {
currentFrame = 1;
}
timer = 0;
}
}
sourceRect.X = currentFrame * 48 - 48; //I subtract 48 here to make the first frame 1 not 0.
这是绘制方法:
spriteBatch.Draw(texture, position, sourceRect, Color.White);
我要做的是当向上键关闭时,显示第7帧到第13帧的动画(来自精灵表)。 当向上键未关闭时,将绘制第1帧到第6帧的动画 问题:当我一直按下向上键时,它工作正常,但当我按下向上键一次时,动画就会卡在第7帧。
答案 0 :(得分:0)
if (currentFrame > 7) currentFrame = 1;
尝试更改
if (currentFrame >= 7) currentFrame = 1;
答案 1 :(得分:0)
详细说明来自@Silveor的回答:首次通过循环,我们假设currentFrame
为1且timer
小于delay
。
Keys.Up
是键。currentFrame
小于7(为1),因此请将其设为7。timer
小于delay
,因此请跳过增加currentFrame
的代码Keys.Up
不是按键。currentFrame
不小于7(为7),所以不要将其设置为1 timer
大于delay
。由于currentFrame
不小于6或等于6 currentFrame
仍然不会增加或设置为1
currentFrame
更改为其他任何内容,因此它会卡在第7帧。因此,如果您在上面的步骤(5)中检查值7,那么您可以将其设置为1.这就是为什么@ Silveor的答案是正确的。 :)