java基于Tile的游戏ArrayIndexOutOfBoundsException错误

问题描述:

我在世界级的getTile函数中有ArrayIndexOutOfBoundsException错误,我的问题是我不能在背景图像上放置背景,我不能添加其他的瓷砖,我有空窗口和这些错误。java基于Tile的游戏ArrayIndexOutOfBoundsException错误

package com.game.Tiles; 
import java.awt.Graphics; 
import java.awt.image.BufferedImage; 

public class Tile { 
    // static stuff 
    public static Tile[] tiles = new Tile[512]; 
    public static Tile background = new Background(0); 
    public static Tile target = new Target(1); 
    // class 

    public static final int TILE_WIDTH = 50, TILE_HEIGHT = 50; 
    protected BufferedImage texture; 
    protected final int id; 

    public Tile(BufferedImage texture, int id) { 
     super(); 
     this.texture = texture; 
     this.id = id; 
     tiles[id] = this; // class ı tile a ekliyoruz yukardan gelen id ile 
    } 

    public void tick(){ 

    } 
    public void render(Graphics graphic, int positionX, int positionY){ 
     graphic.drawImage(texture, positionX, positionY, TILE_WIDTH, TILE_HEIGHT, null); 
    } 

    public int getId() { 
     return this.id; 
    } 
    public boolean isPasseble() 
    { 
     return false; 
    } 
} 


package com.game.world; 

import java.awt.Graphics; 

import com.game.Tiles.Tile; 

public class World { 


    private int height, width; 
    private int[][] tiles; 

    public World(){ 
     this.loadWorld(); 

    } 
    public void tick(){ 

    } 
    public void render(Graphics graphic){ 
     for (int y = 0; y < this.height; y++) { 
      for(int x = 0; y < this.width; x++){ 
       this.getTile(x, y).render(graphic, x * Tile.TILE_HEIGHT, y * Tile.TILE_WIDTH); 
      } 
     } 
    } 
    public Tile getTile(int x, int y){ 
     Tile t = Tile.tiles[this.tiles[x][y]]; 
     if(t == null) 
      return Tile.background; 

     return t; 
    } 
    private void loadWorld(){ 
     this.width = 30; 
     this.height = 30; 
     this.tiles = new int[this.width][this.height]; 
     for (int x = 0; x < this.width; x++) { 
      for (int y = 0; y < this.height; y++) { 
       this.tiles[x][y] = 0; 
      } 
     } 

    } 
} 

错误:

在线程异常 “线程0” java.lang.ArrayIndexOutOfBoundsException:30 在com.game.world.World.getTile(World.java:28) 在com.game.world.World.render(World.java:23) 在com.game.States.GameState.render(GameState.java:29) 在com.game.Launcher.Game.render(Game.java :73) 在com.game.Launcher.Game.run(Game.java:98) 在java.lang.Thread.run(Thread.java:745)

此行应

for(int x = 0; y < this.width; x++){ 

应该

for(int x = 0; x < this.width; x++){ 
+0

许多感谢的人。 –