0

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

在 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 更改“受保护的位图纹理”;到“受保护的静态位图纹理;”

结果

在 render 方法中设置

结果:与砖块相同(因此有效)

PS:如果您需要其他任何东西来解决此问题,请告诉我:)

4

1 回答 1

0

I figured out it was not displaying a black screen but instead the void tile... I don't know why (I'm working on a fix and it will be posted here) but if I change the public static final Tile VOID = new BasicTile(0, Art.spritesheet[0][0])

to

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

it renders the bricks :)

于 2013-09-23T19:37:16.417 回答