这是我第一次使用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;”
结果:与砖块相同(因此可行)
P.S。:如果你还需要其他任何东西来解决这个问题,请告诉我:)
答案 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])
它呈现砖块:)