玩家与2D数组tilemap

时间:2016-05-13 10:29:13

标签: c# arrays xna collision

我目前使用2D数组绘制了瓷砖地图,并且我的角色也在移动和绘制。

我现在试图解决碰撞方面的问题,我希望将玩家位置引用到瓷砖地图坐标上,如果它们相等则执行必要的碰撞操作。

但是我试图将玩家位置矢量与2D阵列进行比较,并且我不断收到错误,例如"Cannot implicitly convert int to bool"

我想知道是否有人可以帮我解决这个需要检查的情况。 产生编译错误的代码是if(player.Position == Tiles.Map[(int)player.Position.X, (int)playerPosition.Y])

以下是我绘制地图的方式:

public int[,] Map = new int[,]
{
    {0,0,0,1,0,0,0,0,0,0,0,0,0,0},
    {0,0,0,1,0,0,0,0,0,0,0,0,0,0},
    {0,0,0,1,0,0,0,0,0,0,0,0,0,0},
    {0,0,0,1,0,0,0,0,0,0,0,0,0,0},
    {0,0,0,0,0,0,0,0,0,0,0,0,0,0},
    {0,0,0,0,0,0,0,0,0,0,0,0,0,0},
};

public void Draw(SpriteBatch spriteBatch)
{
    int tileMapWidth = Map.GetLength(1);
    int tileMapHeight = Map.GetLength(0);

    for (int x = 0; x < tileMapWidth; x++)
    {
        for (int y = 0; y < tileMapHeight; y++)
        {
            int textureIndex = Map[y, x];
            Texture2D texture = tileTextures[textureIndex];

            spriteBatch.Draw(
                texture,
                source = new Rectangle(x * myTile.Width,
                    y * myTile.Height,
                    tileWidth,
                    tileHeight),
                Color.White);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

你试图将玩家位置与整数数组进行比较,但你想要的是检查数组是否有一个&#34; 1&#34;作为玩家位置的价值。

更改

if(player.Position == Tiles.Map[(int)player.Position.X, (int)playerPosition.Y])

 if(Tiles.Map[(int)player.Position.X, (int)playerPosition.Y] == 1)

否则,如果你知道地图的具体位置(让我们称之为X和Y),那么阵列根本就不涉及,它应该是这样的:

if((int)player.Position.X == X && (int)playerPosition.Y == Y)