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
我要做的是基本上在屏幕上创建一个瓷砖阵列。除了设置对象数组值之外,其他所有工作都可以。
我几乎到处都搜索过,但没有找到任何东西。我打赌它可能是我错过了一些简单的事情。
答案 0 :(得分: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;
}
}
}
答案 1 :(得分:1)
您没有初始化数组中的每个Tiles
,因为默认值为null
。
也许你应该尝试初始化每个Tiles
:
for(int i = 0; i < tiles.length; i++){
tiles[i] = new Tiles();
}
之后,您可以对数组中的每个Tiles
元素执行操作。