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);
}
}
}
当我这样做时,它只是闪烁瓷砖并不断重新绘制它们。我该怎么做才能获得只绘制一次的随机效果?有没有办法用鼠标单击这些磁贴并更改它们?另外,有没有办法使一个瓷砖比其他瓷砖更普遍?
我相信
您希望只随机生成一次瓷砖,然后每次都绘制该随机序列。请记住,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);
}
}