基于java Tile的游戏ArrayIndexOutOfBoundsException错误

时间:2015-12-08 22:40:34

标签: java 2d-games

我在世界级的getTile函数中有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;
            }
        }

    }
}

错误:

  

线程“Thread-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)

1 个答案:

答案 0 :(得分:1)

这一行

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

应该是

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