基于java Tile的游戏ArrayIndexOutOfBoundsException错误

标签 java 2d-games

我在 World 类中的 getTile 函数中遇到 ArrayIndexOutOfBoundsException 错误,我的问题是我无法用背景图像覆盖背景,我无法添加其他图 block ,我得到了空窗口和这些错误。

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;
            }
        }

    }
}

错误:

Exception in thread "Thread-0" java.lang.ArrayIndexOutOfBoundsException: 30 at com.game.world.World.getTile(World.java:28) at com.game.world.World.render(World.java:23) at com.game.States.GameState.render(GameState.java:29) at 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)

最佳答案

这行应该

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

应该是

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

关于基于java Tile的游戏ArrayIndexOutOfBoundsException错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34167445/

相关文章:

java - 使用 StAx 解析 XML 文件时出错

java - 如何在java中获取命令提示符输出?

java - 如何从字符串中调用变量?

java - 如何在java中使用键盘使 Sprite 移动(libgdx)

java - 如何在 spring mvc 中的 Action 之前发送响应

java - for-each 语法转换

c++ - 如何解决这个 "arithmetic exception"?

ios - 如何在 Gamesalad for iOS 中制作通用应用程序?

ios - 具有 4 位小数的 iOS 游戏计时器。我的开发团队说这是不可能的

javascript - 如何在所有图像加载后发出警报?