确定在python/pygame中动画的第一个精灵
所以我使用这个spritesheet(4个精灵和一个coloumn中的3个精灵)来为我制作的游戏中的角色制作动画。它动画就好,没有问题,就像我想要的那样确定在python/pygame中动画的第一个精灵
当我想要将状态从“破折号”(运行到敌人)改变为“攻击”(好,攻击敌人)时,问题开始出现。它似乎并没有从一开始就播放攻击精灵(索引0)
我在set_state(self)函数上使用了self._currentFrame = 3,所以当函数改变时它将帧重置为第三帧,这使得(self.currentFrame + 1)%4返回0
但仍然,有时它不会做我想要的,并开始约2号或3号动画(动画结束)的动画。我如何确保我的动画从索引0开始?
我的更新代码如下,如果它可以帮助
self.frameTime += dt
if self.fps is not -1:
while self.frameTime > 1.0/self.fps:
self.frameTime -= 1.0/self.fps
self.currentFrame = (self.currentFrame + 1) % 4
self.currentVFrame = (self.currentVFrame + 1) % 3
谢谢安德鲁,但我解决了它。原来,我只需要调整self.fps
(动画帧,而不是屏幕),以便1.0/self.fps
比self.frameTime
感谢安德鲁更小,有没有什么办法,我可以给你的声誉?或者结束这个问题?
编辑: 为什么currentFrame打印为3? Actor类(从AnimatedGameObject继承的类)有一个set_state(self, newState)
函数(将self.currentFrame
更改为3),以更改状态,以便上面的更新代码(如我所解释的)返回0,并且动画从在开始帧
问题是,当在update(self, dt)
功能self.fps
具有为4的值,则1.0/self.fps
具有比self.frameTime
和作为效应一个更低的值时,self.currentFrame
不是在的开头设定为0动画 所以我实际上只需要将self.fps
加倍到8,代码就像我想要的那样
你有没有测试,以确保起始值实际上只有3个,被执行的逻辑之前?我问,因为你的总结包括对self._currentFrame
的引用,当你的代码引用self.currentFrame
- 你是分配给一个变量并检查另一个?
关于刊登的问题启动了额外的“答案”编辑:
请参阅https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work关于如何(何时)接受的答案,以及为什么它是有利的说明你与每个问题做你问。
啊那是我的错误,我先编写子类,然后将该currentFrame带到父类。但是我现在已经更正了代码,并且在执行逻辑之前已经打印了值 是的,在逻辑运行之前值是3,但它只在打印一次时才像我想要的那样工作。通常值3打印3次之前,它变成0(这意味着指数3首先呈现) 我不知道如何控制值,所以它打印为3每次攻击时,有什么想法? – Daggio 2010-08-09 01:33:51
如果您希望任何人能够进一步帮助您(例如,将“self.currentFrame”指定为3的代码),则需要使用附加代码更新您的问题。 – Andrew 2010-08-09 02:44:43