4

高度な 2D アップダウン RPG を作成します。

これは、既存の 2D Flash RPG エンジン (Adobe Air) の C# + XNA バージョンになります。

Flash Pro では、レイヤーごとに異なる MovieClip を使用しましたが、XNA を使用して C# でそれを実現するにはどうすればよいでしょうか?

作成した Flash Map Editor からの出力 ( map-data-file ) を使用できるようにしたいと考えています。

出力ファイルは次のようになります。

<layer1>
0.0.0.A.A.A.A.B.B.A.A.0.0.0
0.0.0.A.A.A.A.B.B.B.A.A.0.0
0.0.A.A.A.B.B.B.B.B.B.A.0.0
0.A.A.A.A.B.B.B.B.B.B.A.A.0
0.A.A.A.A.B.B.B.B.B.B.A.A.0
0.A.A.A.A.A.B.B.B.B.B:B.A.0
0.0.A.A.A.A.B.B.B.B.A.A.A.0
0.0.A.A.A.A.A.B.B.A.A.A.0.0
0.0.0.A.A.A.A.B.B.A.A.0.0.0

<layer2>
. . . . . 
. . .
.
.

<layer3>
.
.
.

など...

どこ:

0 = Blank;
A = Gras;
B = Water;

したがって、これらの行を単純にループし、配列に保存して、対応するスプライトを特定のレイヤーに追加します。おそらく次のようになります。

Layers[2].Add( tile, x, y );

どうすればそれを実現できますか? また、どうすれば z ソートを管理できますか。さらに、橋の下を歩いたり、トンネルを通り抜けたりできるようにしたいのです。

(この画像のように、橋の下を航行している船があるかもしれません)

ここに画像の説明を入力

または次の段階に到達するための階段(レイヤーの切り替え)

皆さんは私に何かアイデアや参考文献を持っていますか?

あなたのすべての答えのためのthx!

編集:

レイヤー hirachy は次のようになります。

map{
    Layer[0] { // "bg"
        xyArray{ .... }
    }
    Layer[1] { // "static" - bottom part / stairs of the bridge
        xyArray{ .... }
    }
    Layer[2] { // "items"
        xyArray{ .... }
    }
    Layer[3] { // "player"
        xyArray{ .... }
    }
    Layer[4] { // "static2" - top part of bridge
        xyArray{ .... }
    }
}

// if the player is ON a tile that hat a Stair funktion, the "player" layer will be
// moved on top of the "static2" layer, so 'Layer[3].Z = 4;' and 'Layer[4].Z = 3;'
// like i showed in the Switch funktion up there
4

1 に答える 1

1

このSpriteBatch.Drawメソッドには、レイヤーを指定できるオーバーロードがあります

具体的には、ここの表の下の2つのエントリ

レイヤーは0と1の間のフロートです。また、でを指定する必要がありSpriteSortModeますSpriteBatch.Begin()。以下は、私が書いたボードゲームの例で、複数のプレーヤーが同じ正方形を占める場合に、プレーヤートークンに色を付け、アクティブなプレーヤーをスタックの最前面に移動します。

if (i == currentPlayer)
{
     SpriteColor = Color.White;
     spriteDepth = 0f; // Front
}
else
{
     SpriteColor = Color.Gray;
     spriteDepth = 0.1f; // Back
}
spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.AlphaBlend);
spriteBatch.Draw(players[i].Sprite, SquareCentre, null, SpriteColor, 0f, SpriteCentre,0.5f, SpriteEffects.None, spriteDepth);
spriteBatch.End();

お役に立てれば。

于 2012-08-19T23:04:48.853 に答える