gpt4 book ai didi

Java编程: Null Image?

转载 作者:行者123 更新时间:2023-12-01 12:20:56 26 4
gpt4 key购买 nike

好的,所以我正在制作一个java游戏,我有一个有3个按钮的菜单,开始,帮助和退出,当我按下开始按钮时,它应该加载瓦片 map 和播放器,然后你就可以玩了游戏,有时它运行完全正常,没有错误,但有时游戏卡住并出现此错误:

瓷砖 map 错误

Exception in thread "Thread-2" java.lang.NullPointerException
at TileMap.TileMap.draw(TileMap.java:180)
at GameState.Level1State.draw(Level1State.java:73)
at GameState.GameStateManager.draw(GameStateManager.java:36)
at Main.GamePanel.draw(GamePanel.java:93)
at Main.GamePanel.run(GamePanel.java:74)
at java.lang.Thread.run(Unknown Source)

错误的目标是这里:

g.drawImage(tiles[0][tilemap[i][j]].getImage(), 
(int)x + j * tileSize,
(int)y + i * tileSize,
null);

有时会出现此错误

玩家错误

Exception in thread "Thread-2" java.lang.NullPointerException
at MapObject.Player.draw(Player.java:82)
at GameState.Level1State.draw(Level1State.java:74)
at GameState.GameStateManager.draw(GameStateManager.java:36)
at Main.GamePanel.draw(GamePanel.java:93)
at Main.GamePanel.run(GamePanel.java:74)
at java.lang.Thread.run(Unknown Source)

目标错误在这里:

g.drawImage(frames[count], (int)x, (int)y, null);

该错误意味着图像为空,对吧?如果是这样,那么我不明白为什么它会这样做,因为图像的任何部分都不为空,所以呃...请帮忙?

这是在需要时加载瓦片 map 的代码

public void loadTiles(String s) {
try{
tileset = ImageIO.read(getClass().getResourceAsStream(s));

numTilesAcross = tileset.getWidth() / tileSize;
tiles = new Tile[2][numTilesAcross];


for(int col = 0; col < numTilesAcross; col++){
subimage = tileset.getSubimage(col * tileSize, 0, tileSize, tileSize);
tiles[0][col] = new Tile(subimage, Tile.NORMAL);
}

} catch(Exception e) {
e.printStackTrace();
}
}

对于玩家来说

public void loadImage(String s, int objSize) throws IOException {
this.objSize = objSize;
image = ImageIO.read(getClass().getResourceAsStream(s));
width = image.getWidth();
height = image.getHeight();
numAcross = width / objSize;
frames = new BufferedImage[numAcross];

for(int col = 0; col < numAcross; col++) {
subimage = image.getSubimage(col * objSize, 0, objSize, objSize);
frames[col] = subimage;
}
}

高级:感谢您的回复!

最佳答案

似乎您可能存在竞争条件:显示与图像完全加载。

您可以使用MediaTracker在尝试显示图像之前跟踪图像是否已完全加载

(来自 Javadoc)

  public void paint(Graphics g) {
if ((tracker.statusAll(false) & MediaTracker.ERRORED) != 0) {
g.setColor(Color.red);
g.fillRect(0, 0, size().width, size().height);
return;
}
g.drawImage(bg, 0, 0, this);
if (tracker.statusID(1, false) == MediaTracker.COMPLETE) {
g.drawImage(anim[index], 10, 10, this);
}
}

关于Java编程: Null Image?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26658761/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com