Java 2D游戏瓷砖无法渲染

时间:2013-09-21 19:15:25

标签: java bitmap render extends tile

这是我第一次使用extends和类似的东西:)

在最近的程序中,我有BasicTile扩展Tile。 我用Bitmap构建基本tile。 位图不是实际的位图,它是我写的一个包含整数数组(保存颜色值)的类。 当我用位图渲染时,我得到一个黑屏。当我使位图静态时,这就消失了(我不想那样,因为我想要多个基本的瓷砖,如草,灌木丛等) 如果我在渲染方法中设置纹理,它也会消失(我不想这样做,或者它会在一秒钟内加载60 * 256位图)。

我测试了一些,在BasicTile的构造函数中,位图中的数组包含正确的值。在render方法中,它只更改为数字-16777216。

信息似乎在两者之间丢失了。我在找到它丢失的地方时遇到了问题,因为我对构造函数和render方法之间的位图没有做任何事情。

这是我的Tile,BasicTile和Bitmap类:

public abstract class Tile {

public static final Tile[] tiles = new Tile[576];
public static final Tile VOID = new BasicTile(0, Art.spritesheet[0][0]);
public static final Tile STONE = new BasicTile(1, Art.spritesheet[1][0]);
public static final Tile GRASS = new BasicTile(2, Art.spritesheet[3][0]);

protected byte id;
protected boolean solid;
protected boolean emitter;

public Tile(int id, boolean isSolid, boolean isEmitter){
    this.solid = isSolid;
    this.emitter = isEmitter;
    tiles[id] = this;
}

public byte getId(){
    return id;
}

public boolean isSolid(){
    return solid;
}

public boolean isEmitter(){
    return emitter;
}

public abstract void render(Screen screen, int x, int y);

}

public class BasicTile extends Tile{

protected int tileId;
protected Bitmap texture;

public BasicTile(int id, Bitmap bitmap) {
    super(id, false, false);
    texture = bitmap;

}

public void render(Screen screen, int x, int y) {
    /*for(int i = 0; i < texture.h; i++){
        for(int j = 0; j < texture.w; j++){
            System.out.println(texture.pixels[j + i * texture.w]);
        }
    }*/ //the algorithm I used to debug (getting the values of the int array)
    screen.render(texture, x, y);
}

}

public class Bitmap {

public int w, h;
public int[] pixels;

public Bitmap(int w, int h){
    this.w = w;
    this.h = h;
    this.pixels = new int[w * h];
}

}

当我渲染到屏幕时,它将其渲染到另一个更大的整数数组:)

添加了示例:

正常代码:见上文(对不起,我只能发布2个链接)

结果:黑屏

使位图静态:在BasicTile中更改“受保护的位图纹理”; to“protected static Bitmap texture;”

result

set it in the render method

结果:与砖块相同(因此可行)

P.S。:如果你还需要其他任何东西来解决这个问题,请告诉我:)

1 个答案:

答案 0 :(得分:0)

我发现它没有显示黑屏,而是显示空白区... 我不知道为什么(我正在修复它,它会在这里发布)但如果我改变了 public static final Tile VOID = new BasicTile(0,Art.spritesheet [0] [0])

public static final Tile VOID = new BasicTile(0,Art.spritesheet [3] [0])

它呈现砖块:)