-3

私は最近 Java でプラットフォーミング ゲームをプログラミングしていますが、別のクラスを使用してマップ (タイル) を保存しようとしたときに問題が発生しました。次に、マップをメイン クラスに移動して修正しようとしましたが、役に立ちませんでした。

これが問題の原因となっているコードです ( world.map1.render(0,0)が削除された場合、問題はありません) - getter と setter を使用する必要があることはわかっています。私は彼らが苦痛だと思うだけです。

public void render(GameContainer arg0, Graphics arg1) throws SlickException {
    world.map1.render(0, 0);
}

これが主な方法です

public static void main(String[] args) throws SlickException{
    AppGameContainer app = new AppGameContainer(new Game());
    app.setDisplayMode(864, 480, false);
    app.setVSync(true);
    app.start();
    playerSheet = new SpriteSheet("resources/images/link3goldstudmod.png", 64, 64);
    player = new Player(playerSheet);
    world = new World();

}

そしてこれがワールドクラス

import org.newdawn.slick.SlickException;
import org.newdawn.slick.tiled.TiledMap;

public class World {
    TiledMap map1;
    World() throws SlickException{
        map1 = new TiledMap("resources/maps/map1.tmx");
    }
}

編集:問題/スタックのがらくた/何でも投稿するのを忘れていました。私はなんてばかだ。

Mon Feb 18 16:33:58 MST 2013 INFO:Slick Build #264
Mon Feb 18 16:33:58 MST 2013 INFO:LWJGL Version: 2.8.5
Mon Feb 18 16:33:58 MST 2013 INFO:OriginalDisplayMode: 1920 x 1080 x 32 @60Hz
Mon Feb 18 16:33:58 MST 2013 INFO:TargetDisplayMode: 864 x 480 x 0 @0Hz
Mon Feb 18 16:33:58 MST 2013 INFO:Starting display 864x480
Mon Feb 18 16:33:58 MST 2013 INFO:Use Java PNG Loader = true
WARNING: Found unknown Windows version: Windows 8
Attempting to use default windows plug-in.
Loading: net.java.games.input.DirectAndRawInputEnvironmentPlugin
Mon Feb 18 16:33:59 MST 2013 INFO:Found 3 controllers
Mon Feb 18 16:33:59 MST 2013 INFO:0 : USB Receiver
Mon Feb 18 16:33:59 MST 2013 INFO:1 : USB Receiver
Mon Feb 18 16:33:59 MST 2013 INFO:2 : Logitech Speaker
Mon Feb 18 16:33:59 MST 2013 ERROR:null
java.lang.NullPointerException
    at zeldaplatform.Game.render(Game.java:36)
at org.newdawn.slick.GameContainer.updateAndRender(GameContainer.java:703)
at org.newdawn.slick.AppGameContainer.gameLoop(AppGameContainer.java:456)
at org.newdawn.slick.AppGameContainer.start(AppGameContainer.java:361)
at zeldaplatform.Game.main(Game.java:27)
Mon Feb 18 16:33:59 MST 2013 ERROR:Game.render() failure - check the game code.
org.newdawn.slick.SlickException: Game.render() failure - check the game code.
at org.newdawn.slick.GameContainer.updateAndRender(GameContainer.java:706)
at org.newdawn.slick.AppGameContainer.gameLoop(AppGameContainer.java:456)
at org.newdawn.slick.AppGameContainer.start(AppGameContainer.java:361)
at zeldaplatform.Game.main(Game.java:27)

コンパイルは正常に行われ、コンソールに次のように表示されるため、それほどエラーではありません。ウィンドウが一瞬表示されてから消えます。

4

1 に答える 1

1

それはNullPointerExceptionです。NPEの原因は1つだけです。使用しようとしているものはインスタンス化されておらず、ですnull。この場合、それはあなたのクラスかworldあなたのクラスのどちらかにあります。Gamemap1World

Gameの開始時にnewをインスタンス化して開始し、次にそのクラスのフィールドにnewをGame.main()割り当てることを検討します(クラスを投稿しませんが、それがスタックトレースから実行できる唯一の方法です))、前者であることを示しています。WorldstaticGamemain()Game.main()

AppGameContainerapp)が起動され、静的フィールドにインスタンス化して割り当てる前に、そのスレッドはのメソッドのstart()インスタンスの呼び出しに進みます。Gamerender()World

staticそのようなフィールドは使用しないでください。それは本当に彼らが何のためにあるのかではありません。これらのインスタンス(、、、および)をのコンストラクターに渡しplayerSheetplayerそれらworldGameプライベートインスタンス変数に割り当てる必要があります。

...
Game myGame = new Game(playerSheet, player, world);
AppGameContainer app = new AppGameContainer(myGame);
...
于 2013-02-19T00:17:03.323 に答える