C# XNA 随机磁贴引擎

本文关键字:引擎 随机 XNA | 更新日期: 2023-09-27 18:25:49

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);
            }
        }
    }

当我这样做时,它只是闪烁瓷砖并不断重新绘制它们。我该怎么做才能获得只绘制一次的随机效果?有没有办法用鼠标单击这些磁贴并更改它们?另外,有没有办法使一个瓷砖比其他瓷砖更普遍?

C# XNA 随机磁贴引擎

我相信

您希望只随机生成一次瓷砖,然后每次都绘制该随机序列。请记住,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);
        }
    }