我最近在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)
这不是一个错误,因为它编译得很好,然后控制台给了我这个。窗口显示一瞬间,然后消失。
答案 0 :(得分:1)
这是一个NullPointerException
。对于NPE,完全是一个原因;你试图使用的东西没有实例化,而是null
。在这种情况下,您world
班级中的Game
或map1
班级中的World
。
考虑到您在Game
开始时实例化新Game.main()
,请启动它,然后继续将新World
分配给所述类的static
字段(你没有发布你的Game
课程,但这是你可以从main()
那里做到这一点的唯一方法,并且堆栈跟踪显示它是Game.main()
),它是前者。
AppGameContainer
(app
)正在使用start()
启动,然后该线程会继续调用该Game
render()
方法的实例已实例化并将World
分配给静态字段。
不要使用static
这样的字段;它真的不是它们的用途。您应该将这些实例(playerSheet
,player
和world
)传递给Game
的构造函数,并将它们分配给私有实例变量。
...
Game myGame = new Game(playerSheet, player, world);
AppGameContainer app = new AppGameContainer(myGame);
...