2013-05-22 149 views
0

我正在製作遊戲,它的2D側滾動,有點像terraria。在我的比賽中,我有偏移,XOffYOff,那些移動的地形。我也有一個方法,我的性格,move(),和所有做的是:用於2D滾動遊戲的Java nullpointerexception

public void move() { 
     if (!ableToMove) //makes sure you can move 
      return; 
     // x += moveX; these 2 methods work, but x and y are just my player coords. 
     // y += moveY; 
     core.setYOff(1); //core is my main class, where the global variables are stored 
    } 

的評論標籤和描述每個變量。所以,setYOff(1)設置YOff像這樣:

private void setYOff(int i){ 
    YOff += i; 
} 

現在,只有一個即我正在訪問move方法的方式。在一個叫PlayerThread的線程中,我有一個不斷調用move()的方法,另一個方法叫applyGravity(),這個方法並沒有真正與這個問題有關。那是在PlayerThread

現在,這裏是我遇到的問題...當我打電話setYOff(),我發現了以下錯誤:

Exception in thread "player Thread" java.lang.NullPointerException 
    at main.Player.move(Player.java:33) 
    at main.PlayerThread.run(PlayerThread.java:24) 
    at java.lang.Thread.run(Unknown Source) 

這是告訴我,當我打電話setYOff()方法在我的move()方法中,它不起作用。我試過只是測試並移動電話來設置線程本身的Y偏移量,它給出了相同的錯誤...然後我試圖將它移動到RefreshThread,有趣的是它確實工作...它移動了整個地圖每20毫秒降低1個像素......我不知道爲什麼!我的移動方法有什麼問題導致這種方式無法正常工作,或者更好的是,我的PlayerThread,從長遠來看,這並不奏效?我的RefreshThread有什麼不同?如果你們需要完整的代碼來處理每個線程的調用,創建等等,我可以提供,但我不確定你會需要這些...我需要做什麼改變?提前致謝!

編輯:我試過了,在我剛PlayerThread註釋掉move()調用,只是有它調整y偏移,和它的工作!所以它與移動方法有關,但是爲什麼呢?

修正之前的編輯:這麼多的測試,我把move()電話回線,並在其中保持setYOff(1),它仍然工作,但同樣無法從移動方法本身...

+2

如果你得到一個NPE,你的核心對象是null。修復。 –

+0

好吧,工作。現在,我確實在構造函數中設置了核心對象,所以爲什麼它不能工作呢,但是它是從方法內部設置的? – PulsePanda

+1

只有用另一雙眼睛深入檢查才能揭示真相,你纔會開悟。 –

回答

2

NullPointerException表示該方法被調用的對象是Null,在這種情況下是core對象。解決這個問題應該消失。