2010-08-08 97 views
0

所以我使用這個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 

回答

0

謝謝安德魯,但我解決了它。原來,我只需要調整self.fps(動畫幀,而不是屏幕),以便1.0/self.fpsself.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,代碼就像我想要的那樣

0

你有沒有測試,以確保起始值實際上只有3個,被執行的邏輯之前?我問,因爲你的總結包括對self._currentFrame的引用,當你的代碼引用self.currentFrame - 你是分配給一個變量並檢查另一個?

關於刊登的問題啓動了額外的「答案」編輯:
請參閱https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work關於如何(何時)接受的答案,以及爲什麼它是有利的說明你與每個問題做你問。

+0

啊那是我的錯誤,我先編寫子類,然後將該currentFrame帶到父類。但是我現在已經更正了代碼,並且在執行邏輯之前已經打印了值 是的,在邏輯運行之前值是3,但它只在打印一次時纔像我想要的那樣工作。通常值3打印3次之前,它變成0(這意味着指數3首先呈現) 我不知道如何控制值,所以它打印爲3每次攻擊時,有什麼想法? – Daggio 2010-08-09 01:33:51

+0

如果您希望任何人能夠進一步幫助您(例如,將「self.currentFrame」指定爲3的代碼),則需要使用附加代碼更新您的問題。 – Andrew 2010-08-09 02:44:43