我正在製作遊戲,它的2D側滾動,有點像terraria。在我的比賽中,我有偏移,XOff
和YOff
,那些移動的地形。我也有一個方法,我的性格,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)
,它仍然工作,但同樣無法從移動方法本身...
如果你得到一個NPE,你的核心對象是null。修復。 –
好吧,工作。現在,我確實在構造函數中設置了核心對象,所以爲什麼它不能工作呢,但是它是從方法內部設置的? – PulsePanda
只有用另一雙眼睛深入檢查才能揭示真相,你纔會開悟。 –