2016-06-20 44 views
0

我想在libgdx中創建一個無限循環的動畫。問題在於,當我運行它時,動畫將運行第一個循環,但由於NullPointerException而發生崩潰。LibGDX - 創建一個無限循環的動畫

我已經設置動畫播放模式循環,通過設置布爾調用getKeyFrame()循環時爲true:

currentFrame = globeAnimation.getKeyFrame(time, true); 

當我運行它,它會爲關鍵幀1-40工作(數量在我的動畫幀,但隨後會與此錯誤崩潰第二個到達關鍵幀41與此錯誤消息:

java.lang.NullPointerException 

我也試圖通過在構造函數中設置它設置播放模式循環:

globeAnimation = new Animation(GLOBE_ANIMATION_FRAME_RATE, globeAnimationTextureRegions, PlayMode.LOOP); 

出於某種原因,我這樣做的時候,它給我的錯誤,指出它

cannot resovle constructor for 
Animation(float,TextureRegion[],PlayMode) constructor Animation.Animation(float,Array<? extends TextureRegion>,PlayMode) 

這是沒有意義的,我的,因爲框架有一個構造函數的確切參數。

public Animation (float frameDuration, Array<? extends TextureRegion> keyFrames, PlayMode playMode) { 

    this.frameDuration = frameDuration; 
    this.animationDuration = keyFrames.size * frameDuration; 
    this.keyFrames = new TextureRegion[keyFrames.size]; 
    for (int i = 0, n = keyFrames.size; i < n; i++) { 
     this.keyFrames[i] = keyFrames.get(i); 
    } 

    this.playMode = playMode; 
} 

有人可以解釋爲什麼這個構造函數不工作或者一個替代路線來做這個工作。

編輯:

菲爾·安德森找到了原因構造並沒有解決:我曾與

new Array<TextureRegion>(globeAnimationTextureRegions). 

更換globeAnimationTextureRegions的構造函數來解決。

+0

確保您導入正確類型的動畫(檢查包名稱)。 – Tenfour04

+0

@ Tenfour04我導入了com.badlogic.gdx.graphics.g2d.Animation – Bhaskar

回答

2

你得到這個錯誤...

cannot resovle constructor for 
Animation(float,TextureRegion[],PlayMode) constructor Animation.Animation(float,Array<? extends TextureRegion>,PlayMode) 

監守要傳遞TextureRegions的Java數組中,參數類型是通用型TextureRegion的libGdx Array對象。

試着像...

globeAnimation = new Animation(GLOBE_ANIMATION_FRAME_RATE, new Array<TextureRegion>(globeAnimationTextureRegions), PlayMode.LOOP); 
+0

你的想法修復了構造函數無法解析的問題,並且允許將PlayMode設置爲LOOP,但由於某種原因它仍然給我一個NullPointerException,動畫的第一個週期。看起來PlayMode.LOOP實際上並不像其應有的功能。你認爲框架有什麼問題,或者我做錯了什麼? – Bhaskar

+0

事實上,nvm,你的答案確實解決了它,只是有一個小小的錯誤就是搞砸了。謝謝! – Bhaskar