エクステンドなどを扱うのはこれが初めてです:)
mt の最新のプログラムでは、Tile を拡張する BasicTile を使用しています。ビットマップを使用して基本的なタイルを作成します。ビットマップは実際のビットマップではなく、整数の配列 (色の値を保持) を含む私が作成したクラスです。ビットマップでレンダリングすると、黒い画面が表示されます。これは、ビットマップを静的にすると消えます (草、茂みなどの複数の基本的なタイルが必要なため、これは望ましくありません) レンダリング メソッドでテクスチャを正しく設定すると消えます (したくありません)。それを行うと、1 秒間に 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 で「保護されたビットマップ テクスチャ」を変更します。「保護された静的ビットマップ テクスチャ」に。
結果: レンガの場合と同じ (動作する)
PS: この問題を解決するために他に何か必要な場合は、教えてください :)