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