我正在尝试制作2D切片游戏,当制作包含切片的阵列时,我得到了NullPointerException,这是一些代码。抱歉,如果格式不正确,请第一时间
公共类世界{
//holds data for where to place images and rectangles int[][] worldDat = new int[25][25]; //hold rectangles for checking interaction with player Rectangle[][] blocks = new Rectangle[25][25]; //holds block's images to be painted Image[][] blockImage = new Image[25][25]; //holds position to be pained on screen int[][] location = new int[25][25]; //enumeration holding block's images and other things of the sort EWorldBlocks eBlocks; //sets all of the arrays listed above public void setupAll(){ for(int i = 0; i < 24; i++){ for(int e = 0; e < 24; e++){ blocks[i][e].setBounds(e * 20, i * 20, 20, 20); blocks[i][e].setLocation(e*20, i*20); if(worldDat[i][e] == 6){ blockImage[i][e] = getRandomGrass(); }else if(worldDat[i][e] == 0){ blockImage[i][e] = null; }else{ blockImage[i][e] = eBlocks.intToImage(worldDat[i][e]); } } } } //used to get a random block private Image getRandomGrass() { Random rand = new Random(); int r = rand.nextInt(2); r++; return eBlocks.intToImage(r); } public World(int[][] worldDat) { this.worldDat = worldDat; } }
然后在本课程中被称为(我相信这是问题的一部分)
公共类worldDraw {
//ALSO if there is a better way to do this, do tell levels levels = new levels(); static levels sLevels = new levels(); World level1; static World sLevel1 = new World(sLevels.getLevel1()); //called in paint method for panel public void draw(Graphics2D g2){ sLevel1.setupAll(); for(int i = 0; i < 24; i++){ for(int e = 0; i < 24; i++){ g2.drawImage(level1.blockImage[i][e], e*25, i*25, null); } } } //holds levels public worldDraw() { level1 = new World(levels.getLevel1()); } }
创建对象数组时,将创建引用数组,但未分配引用。在尝试使用它们之前,必须先执行此操作。认为它类似于创建鸡蛋纸箱。在先将鸡蛋装满纸箱之前,您不能使用任何鸡蛋。因此,例如您的blocks数组,首先需要将Rectangle对象分配给数组中的每个项目,然后才能对其调用方法。这通常在for循环中完成。例如,
for(int i = 0; i < 24; i++){ for(int e = 0; e < 24; e++){ blocks[i][e] = new Rectangle(....); //... blocks[i][e].setBounds(e * 20, i * 20, 20, 20); blocks[i][e].setLocation(e*20, i*20);