-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

这是一个NullPointerExceptionNPE的原因只有一个;您尝试使用的东西没有被实例化并且是null. 在这种情况下,要么world在你的Game班级,要么在map1你的World班级。

考虑到你在你的开头实例化一个新GameGame.main(),启动它,然后继续为所述类World的一个static字段分配一个新的(你不发布你的Game类,但这是你可以从main()堆栈跟踪中做到这一点的唯一方法表明它是Game.main()),它是前者。

AppGameContainer( app) 正在被启动,start()然后该线程在您实例化并将您分配给静态字段之前继续调用该方法Game的实例。render()World

不要使用static这样的字段;这真的不是他们的目的。您应该将这些实例(playerSheetplayerworld)传递给 的构造函数Game并将它们分配给私有实例变量。

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