2015-12-08 3 views
0

У меня есть ошибка ArrayIndexOutOfBoundsException в функции getTile, которая находится в классе World, моя проблема в том, что я не могу поместить фон с фоновым изображением, я не могу добавить другие плитки, я получил пустое окно и эти ошибки.java Tile based game ArrayIndexOutOfBoundsException error

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) at com.game.Launcher.Game.run (Game.java:98) at java.lang.Thread.run (Thread.java:745)

ответ

1

Эта линия должна

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

должен быть

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

большое спасибо человеку. –