0
    dmap = new Tile[maxW][maxH];
    for (int y = 0; y < maxH; ++y)
        for (int x = 0; x < maxW; ++x)
            dmap[x][y] = new Tile();

とにかく0になるメンバーTileしか持っていないにもかかわらず、これは遅いです。改善できますか、それとも C++ に戻す必要がありますか?intTile()

maxWmaxH両方とも 255 であり、私の環境は Android エミュレーターです。

もう遅いのはこのコードではないと思います。私のLog.i()ステートメントが LogCat ビューに表示されなくなりました...y上記の初期化コードで、それぞれに 1 つ入れました。

4

2 に答える 2

1

各配列要素に有効なオブジェクトを含める場合は、はい、各配列要素に入れるオブジェクトを作成する必要があります。ただし、達成しようとしていることに応じて、次のことが役立つ場合があります。

遅延初期化: 配列をラップし、必要なときにだけタイルを作成して、配列のほとんどを null で埋めることができます。

抽象化を移動します: Tile オブジェクトの配列の代わりに、おそらく int の 2D 配列を含む TileMap オブジェクトを持ち (これは構築を必要とせず、デフォルトでゼロになります)、指定されたタイルに適切な Tile を返すようにします。索引。

現時点では、すべてのタイルに int のみが含まれていると言います。同じ int 値を持つ異なるタイルを個別のオブジェクトにしたいですか? ここでの費用の多くは、新しいオブジェクトを作成することであり、配列インデックスに割り当てることではありません。インスタンスを事前に作成するか、場合によっては Tile インスタンスの列挙を使用すると、このオーバーヘッドを繰り返す必要がなくなります。

于 2012-07-02T09:57:16.393 に答える
1

オブジェクトで配列を初期化する必要はありません。デフォルトでは、null 値が含まれます。これで問題ない場合は、このままにしておくことができます。

于 2012-07-02T09:50:16.373 に答える