smo*_*med 2 c# xna windows-phone-7 xna-4.0
我制作了这段代码,将大约8种不同的纹理加载到具有纹理属性的对象列表中.
我有一个名为"1.png,2.png,3.png,.......,46.png"的纹理文件夹,我希望8个不同的对象加载随机选择的纹理.
DockedFruitsList = new List<Fruit>(8);
for (int i = 0; i < 8; i++)
{
Fruit temp = new Fruit();
temp = new Fruit();
temp.Position = AvailablePositions[i];
int random=(new Random().Next(0, 4600) % 46);
temp.Texture = Content.Load<Texture2D>(@"Fruits/" + random);
DockedFruitsList.Add(temp);
}
Run Code Online (Sandbox Code Playgroud)
问题是,尽管随机总是生成不同的数字,但绘制的结果始终是相同的纹理,它从运行变为另一个运行,但对于所有8个纹理它总是相同的
spriteBatch.Begin();
for (int i = 0; i < DockedFruitsList.Count; i++)
{
spriteBatch.Draw(DockedFruitsList[i].Texture, DockedFruitsList[i].Position, Color.White);
}
spriteBatch.End();
Run Code Online (Sandbox Code Playgroud)
试试这个:
for (int i = 0; i < 100; i++)
Console.WriteLine(new Random().Next(0, 10));
Run Code Online (Sandbox Code Playgroud)
赔率是你会得到这样的输出:
5
5
5
.
.
.
Run Code Online (Sandbox Code Playgroud)
这是因为Random
使用基于时间的值初始化类的种子.如果你Random
在同一个时间点附近初始化类的许多实例,那么它们都将以相同的种子结束,因此它们将产生的值将是相同的.
您真正想要做的是创建一个 Random
实例并将其用于所有随机值.生成的值将彼此无关:
var r = new Random();
for (int i = 0; i < 100; i++)
Console.WriteLine(r.Next(0, 10));
Run Code Online (Sandbox Code Playgroud)
输出:
2
8
0
.
.
.
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1768 次 |
最近记录: |