0

エクステンドなどを扱うのはこれが初めてです:)

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 で「保護されたビットマップ テクスチャ」を変更します。「保護された静的ビットマップ テクスチャ」に。

結果

render メソッドに設定します。

結果: レンガの場合と同じ (動作する)

PS: この問題を解決するために他に何か必要な場合は、教えてください :)

4

1 に答える 1

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])

レンガをレンダリングします:)

于 2013-09-23T19:37:16.417 に答える