我正在尝试用Java制作Super Mario Bros平台游戏进行练习,当我加载程序时,屏幕上的所有纹理开始闪烁,并且控制台因错误而疯狂。 (它是一张图片,所以您看不到闪烁的光。)
现在是关键,当我加载比那些砖块(仅是黑色或蓝色等纯色)更简单的纹理时,闪烁停止。同样,减少我一次在屏幕上显示的块数量也可以停止闪烁/错误。
public class Level
{
public Block[][] level;
int blockDim;
private Component component;
public Level(String path, Component component)
{
this.component = component;
blockDim = component.width/30;
loadLevelFromImage(ImageLoader.loadImage(path));
}
public void loadLevelFromImage(BufferedImage image)
{
level = new Block[15][15];
for(int x = 0; x < level.length; x++)
for(int y = 0; y < level[x].length; y++)
level[x][y] = new FloorBlock(x * blockDim, y * blockDim, blockDim, blockDim);
}
ArrayList<Entity> entities = new ArrayList<Entity>();
public void update()
{
entities.clear();
for(int x = 0; x < level.length; x++)
for(int y = 0; y < level[x].length; y++)
entities.add(new FloorBlock(x * blockDim, y * blockDim, blockDim, blockDim));
}
public void render(Graphics g)
{
for(int i = 0; i < entities.size(); i++)
entities.get(i).render(g);
}
}
我的程序使用
每秒循环执行Update和render方法60次game.update();
game.repaint();
(其中Game是一个JPanel,只是具有自己的update和paintComponent方法,可在其中调用level.update和level.render)
这也是它给我的错误,没有多大意义,因为它仅在纹理详细且丰富时才出现,如屏幕截图所示)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at main.Level.render(Level.java:52)
at main.Game.paintComponent(Game.java:27)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintToOffscreen(Unknown Source)