基于2D平铺的游戏引擎 - 使用C#在XNA中进行层管理

时间:2012-08-15 09:41:38

标签: c# xna 2d

我打算建立一个先进的2D Up-Down 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排序,因此我希望能够在桥下行走,或者穿过隧道。

(就像在这张图片中,可能有一艘船在桥上行驶)

enter image description here

甚至一些楼梯进入下一阶段(转换层)

你们对我有什么想法甚至是反思吗?

感谢你的所有答案!

编辑:

层hirachy shoult看起来像这样:

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

1 个答案:

答案 0 :(得分:1)

SpriteBatch.Draw方法具有允许您指定图层

的重载

具体而言,表格here

中的最后两个条目

图层是介于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();

希望这有帮助。