C#XNA随机磁贴引擎

时间:2012-02-27 06:17:51

标签: c# random xna tile tile-engine

public void Draw(SpriteBatch theSpriteBatch)
    {
        Random rand = new Random();
        for(int y = 0; y < map.GetLength(0); y++) {
            for(int x = 0; x < map.GetLength(1); x++) {
                theSpriteBatch.Draw(tile[rand.Next(0,3)], new Rectangle(x*tileWidth,y*tileHeight,tileWidth,tileHeight), 
                    Color.White);
            }
        }
    }

当我这样做时,它只是闪烁着瓷砖并不断地重新绘制它们。我怎么办才能获得随机效果,只画一次?有没有办法用鼠标点击这些瓷砖并让它们改变?另外,有没有办法让一块瓷砖比其他瓷砖更普遍?

1 个答案:

答案 0 :(得分:3)

我相信您只想随机生成一次的图块,然后每次绘制随机序列。请记住,XNA中的Draw运行每个“帧”,通常每秒不止一次!

将当前循环复制到新区域:地图加载。还添加2D数据结构(数组或其他)以存储切片生成的结果。我正在调用我的样本2D整数数组tileNums。现在,保持循环现在,但更改内部以存储结果而不是绘制:

    Random rand = new Random();
    for(int y = 0; y < map.GetLength(0); y++) {
        for(int x = 0; x < map.GetLength(1); x++) {
            tileNums[x, y] = rand.Next(0,3);
        }
    }

现在只需将当前Draw循环的内部更改为不再随机生成,而是从此数据中获取:

    //Random object no longer needed
    for(int y = 0; y < map.GetLength(0); y++) {
        for(int x = 0; x < map.GetLength(1); x++) {
            theSpriteBatch.Draw(tile[tileNums[x, y]], new Rectangle(x*tileWidth,y*tileHeight,tileWidth,tileHeight), 
                Color.White);
        }
    }