这是我第一次使用扩展和类似的东西:)
在 mt 最近的程序中,我有 BasicTile 扩展 Tile。我用位图构建基本图块。位图不是实际的位图,它是我编写的包含整数数组(保存颜色值)的类。当我用位图渲染时,我得到一个黑屏。当我将位图设为静态时,它就会消失(我不希望这样,因为我想要多个基本图块,如草、灌木等)。如果我在渲染方法中正确设置纹理(我不想要么这样做,要么每秒加载 60*256 位图)。
我测试了一些,在 BasicTile 的构造函数中,位图中的数组包含正确的值。在渲染方法中,它只变成了数字 -16777216。
信息似乎在两者之间的某个地方丢失了。我无法找到丢失的位置,因为我没有对构造函数和渲染方法之间的位图做任何事情。
这是我的 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 更改“受保护的位图纹理”;到“受保护的静态位图纹理;”
结果:与砖块相同(因此有效)
PS:如果您需要其他任何东西来解决此问题,请告诉我:)