0

xml を介してゲームのレベルをロードしています。

「名前」をテストし、それに応じてスプライトを追加するループがあります。

幅と高さが 80x80 のタイルを含むマップがあります。マップの行と列は 6x10 です。

座標で特定のことをしたいので、タイルの読み込み中にレベルローダーがどの行と列にあるかを追跡する方法を見つけようとしています。

これに2次元配列を使用することを考えましたが、この状況でこれを行う方法がわかりません。

誰でもこれで私を助けてくれますか?

編集:

これが私が試したことです。

行と列の配列の作成

 int row[] = new int[6];
 int col[] = new int[10];

ここで行き詰まっています。別の行を切り替えて使用するタイミングをコードに伝える方法がわかりません。例えば..

if (name.equals(TAG_ENTITY_ATTRIBUTE_TYPE_unwalkable)) {
    tile = new Tile(x, y, this.tUnwalkable_tile,
            activity.getVertexBufferObjectManager());
    tileList.add(tile);
    tile.setTag(1);

    /*
     * Body groundBody = PhysicsFactory.createBoxBody(this.mPhysicsWorld,
     * tile, BodyType.StaticBody, wallFixtureDef);
     */
    gameScene.getChildByIndex(SECOND_LAYER).attachChild(tile);
    Log.e("Tile", "Unwalkable_Tile");
    return;
} else if (name.equals(TAG_ENTITY_ATTRIBUTE_TYPE_Blue_Tile)) {
    tile = new Tile(x, y, this.blue,
            activity.getVertexBufferObjectManager());
    tile.setTag(0);
    this.tileList.add(tile);
    gameScene.getChildByIndex(SECOND_LAYER).attachChild(tile);
    return;

} else if (name.equals(TAG_ENTITY_ATTRIBUTE_TYPE_Red_Tile)) {
    tile = new Tile(x, y, this.red, activity.getVertexBufferObjectManager());
    tileList.add(tile);
    tile.setTag(0);
    gameScene.getChildByIndex(SECOND_LAYER).attachChild(tile);
    return;
} else if (name.equals(TAG_ENTITY_ATTRIBUTE_TYPE_Pink_Tile)) {
    tile = new Tile(x, y, this.pink,
            activity.getVertexBufferObjectManager());
    tileList.add(tile);
    tile.setTag(0);
    gameScene.getChildByIndex(SECOND_LAYER).attachChild(tile);
    return;
} else if (name.equals(TAG_ENTITY_ATTRIBUTE_TYPE_Yello_Tile)) {
    tile = new Tile(x, y, this.yellow,
            activity.getVertexBufferObjectManager());
    tileList.add(tile);
    tile.setTag(0);
    gameScene.getChildByIndex(SECOND_LAYER).attachChild(tile);
    return;

    }

col[10] に到達するまで、row[1] にとどまるようにするにはどうすればよいですか?

その後、row[2] に切り替えて、col[10] に再び到達するまでそこにとどまりますか?

4

1 に答える 1

0

設計の観点からは、レベル ローダーはレベルをロードするだけである必要があります。その上で実行したい魔法の変換はすべて、個別に処理することができます。

したがって、レベル ローダーに 2 次元配列を作成させるだけです... 読み取っているものは何でも。タイル要素のフラットなセットを読んでいますか? 次に、読み取られた要素の数をカウントします。任意の時点でのオフセットは次のとおりです。

 x = count % 10;
 y = count / 6; 

カプセル化要素に各行がある場合は、行と列を数えます。同じ考えです。

これで、2 次元配列 (またはそれをカプセル化したオブジェクト) ができました。そして、あなたはそれであなたが望むどんな変換も行うことができます. 画面スペースの観点からこれが必要な場合は、代わりに各カウントに 80 を掛けます。

編集:上記の編集から、行と列の配列を別々に宣言しているように見えますが、これはおそらくやりたくないでしょう。より論理的には次のようになります。

int[][] tiles = new int[6][];
for (int i = 0; i < 6; i++) {
  tiles[i] = new int[10];  
}

次に、ローダーで、カウンターをどこかに (1 回) 定義します。

int counter = 0;

次の場合に行を切り替えます。

counter > 0 && (counter++) % 10 == 0 

しかし、2 次元配列では、上で述べたように、実際には座標を持っていると考えることができます。

 x = counter % 10;
 y = counter / 6; 

最終的に、すべてのタイル データを保持する tiles[][] 変数が 1 つあります。したがって、次のように言えます。

tiles[x][y] = <whatever data you need to store>

完了したら、カウンターをインクリメントすることを忘れないでください。

于 2013-01-05T22:36:36.870 に答える