我正在尝试为非常简单的2D游戏创建图形。我有imageIcons的数组列表,当玩家移动时会连续绘制。一个用于向上,一个用于向下,等等。截至目前,我没有完成的精灵,所以我用一个临时图像替换了每个单独的精灵。
//this is inside the constructor
playerUp.add(new ImageIcon("Player1.png"); //will be a different image, but this image still exists
playerUp.add(new ImageIcon("Player1.png"); //will be a different image, but this image still exists
playerUp.add(new ImageIcon("PLayer1.png"); //will be a different image, but this image still exists
然后我将它们绘制成一个屏幕外图像,然后我将其绘制到屏幕上以防止闪烁。
//offg is the graphics object of the offscreen image and g is for the panel
offg.clearRect(0, 0, panel.getWidth(), panel.getHeight());
playerUp.get(0).paintIcon(panel, offg, x, y);
g.drawImage(offscreen, 0, 0, panel); //this is where the error occurs!
无论如何我尝试使用的代码中存在某种错误:
playerUp.add(new ImageIcon(getClass().getResource("Player1.png")));
但我不知道我是否需要,或者如何正确使用它(研究时我看了很多),然而,这并没有解决问题。此外,我确保图像与.class和.java文件位于同一文件夹中。
另外,我创建了一个单独的类,它只是将ImageIcon直接绘制到面板上,它使用了完全不同的图像。
ImageIcon ii = new ImageIcon("downlaodedimage.png"); //downlaodedimage.png is the different image
ii.paintIcon(panel, g, 0, 0);
这会产生一个空指针异常。我用过:
System.out.println(ii);
它打印出了downloadedimage.png,所以我不知道是什么问题?
答案 0 :(得分:0)
问题是该行上的某些内容尚未初始化。尝试调试它以找到哪个为null,并确保在调用之前初始化它。或者,如果在游戏循环期间发生这种情况,并且稍后在循环中初始化变量,则可以使用try-catch将其包围以等待变量初始化。