0

package net.gfx;

public class TileSet {

    public final int TILES = 627;

    class Tiles {
        int x = 0, y = 0;
        int w = 0, h = 0;

    }

    public Tiles tiles[] = new Tiles[TILES];

    public TileSet() {
        for (int i = 0, y = 0; i < TILES; i++) {
            for (int x = 0; x < 1280; x =+ 25) {
                if (x > 1280) {
                    x = 0;
                    y += 40;

                }
                else {
                    tiles[i].x = x; //ERROR CAUSED HERE
                    tiles[i].y = y; //TO HERE *Unknown reason*
                    tiles[i].w = 40;
                    tiles[i].h = 40;

                }

            }

        }

    }

}

エラーは次のようになります:

Exception in thread "main" java.lang.ExceptionInInitializerError
    at net.jump.Jump.<clinit>(Jump.java:8)
Caused by: java.lang.NullPointerException
    at net.gfx.TileSet.<init>(TileSet.java:24)
    at net.gfx.Graphics.<clinit>(Graphics.java:10)
    ... 1 more

私がやろうとしているのは、基本的に画面上にタイルの配列を作成することです。オブジェクト配列の値を設定する以外に、他のすべてが機能します。

私はほとんどどこでも検索しましたが、何も見つかりませんでした。おそらく、私が見逃した単純なことだと思います。

4

2 に答える 2

2

Tiles操作を行う前に、 のインスタンスを作成する必要があります。

 for (int i = 0, y = 0; i < TILES; i++) {
    for (int x = 0; x < 1280; x =+ 25) {
        if (x > 1280) {
            x = 0;
            y += 40;

        }
        else {
            tiles[i] = new Tiles(); //instance created here.
            tiles[i].x = x; 
            tiles[i].y = y; 
            tiles[i].w = 40;
            tiles[i].h = 40;

        }

    }

}
于 2013-09-05T00:42:15.517 に答える
1

Tilesデフォルト値は であるため、配列内のそれぞれを初期化していませんnull

おそらく、それぞれを初期化してみてくださいTiles:

for(int i = 0; i < tiles.length; i++){
    tiles[i] = new Tiles();
}

その後Tiles、配列内の各要素に対して操作を実行できます。

于 2013-09-05T00:38:18.310 に答える