我已經嘗試運行沒有碰撞的代碼,並且它工作正常。但有了它,我得到一個NullPointerException。問題的根源有事情做與Java NullPointerException碰撞是來源,但不知道爲什麼
blocked[xAxis][yAxis] = true;
編輯:對不起,不提供的痕跡早。
控制檯:在TiledMap類
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE map SYSTEM "http://mapeditor.org/dtd/1.0/map.dtd">
<map version="1.0" orientation="orthogonal" width="10" height="10" tilewidth="32" <tileheight="32">
<tileset name="wall" firstgid="1" tilewidth="32" tileheight="32">
<image source="wall.png"/>
<tile id="0">
<properties>
<property name="blocked" value="true"/>
</properties>
</tile>
</tileset>
<tileset name="grass" firstgid="2" tilewidth="32" tileheight="32">
<image source="grass.png"/>
</tileset>
<layer name="Layer 0" width="10" height="10">
<data encoding="base64" compression="gzip">
H4sIAAAAAAAAAGNkYGBgJBIzEcCUqBvsYtTwLzEYAHHwHBmQAQAA
</data>
</layer>
</map>
全碼的
Wed Dec 21 20:32:52 PST 2011 INFO:Slick Build #274
Wed Dec 21 20:32:52 PST 2011 INFO:LWJGL Version: 2.8.2
Wed Dec 21 20:32:52 PST 2011 INFO:OriginalDisplayMode: 1440 x 900 x 32 @60Hz
Wed Dec 21 20:32:52 PST 2011 INFO:TargetDisplayMode: 800 x 600 x 0 @0Hz
Wed Dec 21 20:32:53 PST 2011 INFO:Starting display 800x600
Wed Dec 21 20:32:53 PST 2011 INFO:Use Java PNG Loader = true
Loading: net.java.games.input.DirectAndRawInputEnvironmentPlugin
Wed Dec 21 20:32:54 PST 2011 INFO:Found 0 controllers
Exception in thread "main" java.lang.NullPointerException
at RPG.Main.init(Main.java:41)
at org.newdawn.slick.AppGameContainer.setup(AppGameContainer.java:390)
at org.newdawn.slick.AppGameContainer.start(AppGameContainer.java:314)
at RPG.Main.main(Main.java:102)
屬性。
public class Main extends BasicGame {
Image player = null;
Image land = null;
private float playerX = 32f;
private float playerY = 32f;
private static final int SIZE = 32;
private boolean[][] blocked;
private TiledMap map;
public Main()
{
super("Classic");
}
@Override
public void init(GameContainer gc)
throws SlickException
{
player = new Image("RPG/player.png");
map = new TiledMap("RPG/Map.tmx");
for (int xAxis=0;xAxis<map.getWidth(); xAxis++)
{
for (int yAxis=0;yAxis<map.getHeight(); yAxis++)
{
int tileID = map.getTileId(xAxis, yAxis, 0);
String value = map.getTileProperty(tileID, "blocked", "false");
if ("true".equals(value))
{
blocked[xAxis][yAxis] = true;
}
}
}
}
@Override
public void update(GameContainer gc, int delta)
throws SlickException
{
Input input = gc.getInput();
if (input.isKeyDown(Input.KEY_LEFT)) {
if (!isBlocked(playerX, playerY - delta * 0.1f))
{
playerX-= delta * 0.1f;
}
}
if (input.isKeyDown(Input.KEY_RIGHT)) {
if (!isBlocked(playerX, playerY - delta * 0.1f))
{
playerX+= delta * 0.1f;
}
}
if (input.isKeyDown(Input.KEY_UP)) {
if (!isBlocked(playerX, playerY - delta * 0.1f))
{
playerY-= delta * 0.1f;
}
}
if (input.isKeyDown(Input.KEY_DOWN)) {
if (!isBlocked(playerX, playerY - delta * 0.1f))
{
playerY+= delta * 0.1f;
}
}
}
public void render(GameContainer gc, Graphics g)
throws SlickException
{
map.render(0, 0);
player.draw(playerX, playerY);
}
private boolean isBlocked(float playerX, float playerY)
{
int xBlock = (int)playerX/SIZE;
int yBlock = (int)playerY/SIZE;
return blocked[xBlock][yBlock];
}
public static void main(String[] args)
throws SlickException
{
AppGameContainer app = new AppGameContainer(new Main());
app.setDisplayMode(800, 600, false);
app.start();
}
}
請發佈完整的堆棧跟蹤和行號(並提及代碼中的行) – LazyCubicleMonkey 2011-12-22 04:42:30
您可以提供堆棧跟蹤嗎? – Steven 2011-12-22 04:44:11
NPE通常很容易調試。堆棧跟蹤會告訴你它是從哪一行中拋出的。你所需要做的就是在那裏貼一個斷點,看看你想要解除引用的是什麼null變量。你沒有提供有關NPE在哪裏投放的信息,那麼我們應該告訴你什麼? – 2011-12-22 04:44:26