Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#XNA随机磁砖引擎 public void Draw(SpriteBatch-theSpriteBatch) { Random rand=新的Random(); for(int y=0;y_C#_Random_Xna_Tile_Tile Engine - Fatal编程技术网

C#XNA随机磁砖引擎 public void Draw(SpriteBatch-theSpriteBatch) { Random rand=新的Random(); for(int y=0;y

C#XNA随机磁砖引擎 public void Draw(SpriteBatch-theSpriteBatch) { Random rand=新的Random(); for(int y=0;y,c#,random,xna,tile,tile-engine,C#,Random,Xna,Tile,Tile Engine,当我这样做的时候,它只是闪烁着瓷砖并不断地重新绘制它们。我该怎么做才能让它只画一次就得到随机效果呢?有没有一种方法可以让我用鼠标点击这些瓷砖并将其更改?还有,有没有办法使一个图块比其他图块更普遍?我相信您希望只随机生成一次的图块,然后每次都绘制该随机序列。请记住,Draw在XNA中运行每个“帧”,通常每秒不止一次 将当前循环复制到一个新区域:地图加载。还可以添加一个二维数据结构(数组或其他)来存储平铺生成的结果。我正在调用示例2D整数数组tilenum。现在,保持循环现在的状态,但更改内部以存储

当我这样做的时候,它只是闪烁着瓷砖并不断地重新绘制它们。我该怎么做才能让它只画一次就得到随机效果呢?有没有一种方法可以让我用鼠标点击这些瓷砖并将其更改?还有,有没有办法使一个图块比其他图块更普遍?

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

将当前循环复制到一个新区域:地图加载。还可以添加一个二维数据结构(数组或其他)来存储平铺生成的结果。我正在调用示例2D整数数组
tilenum
。现在,保持循环现在的状态,但更改内部以存储结果,而不是绘制:

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

我相信您希望只随机生成一次瓷砖,然后每次绘制该随机序列。请记住,
Draw
在XNA中运行每个“帧”,通常每秒不止一次

将当前循环复制到一个新区域:地图加载。还可以添加一个二维数据结构(数组或其他)来存储平铺生成的结果。我正在调用示例2D整数数组
tilenum
。现在,保持循环现在的状态,但更改内部以存储结果,而不是绘制:

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

非常感谢。我不知道draw会运行每一帧,但当我看到它闪烁时,我想这就是问题所在。我只是不知道如何处理得到的随机,但我现在明白了。但有一个问题是,我使用tilenms数组得到的索引超出了范围。我创建如下数组int[,]tileNums=newint[0,3];对吗?不,这些是每个维度的大小。这个结构应该与您的map大小完全相同,因此我将执行
newint[map.GetLength(1),map.GetLength(0)]
(既然我做了
x,y
,当然你可以做
y,x
,然后反转它们)啊!好吧,现在我想起来,这很有道理:p。非常感谢你帮助我,谢谢你!我不知道draw会运行每一帧,但当我看到它闪烁时,我想这就是问题所在。我只是不知道如何处理得到的随机,但我现在明白了。但有一个问题是,我使用tilenms数组得到的索引超出了范围。我创建如下数组int[,]tileNums=newint[0,3];对吗?不,这些是每个维度的大小。这个结构应该与您的map大小完全相同,因此我将执行
newint[map.GetLength(1),map.GetLength(0)]
(既然我做了
x,y
,当然你可以做
y,x
,然后反转它们)啊!好吧,现在我想起来,这很有道理:p。非常感谢你帮了我的忙
    //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);
        }
    }