这些是我的课程:
namespace MyFirstGame
{
public static class OstacoliManager
{
#region Dichiarazioni
private static List<Ostacolo> ostacoli = new List<Ostacolo>();
private static List<Ostacolo> oggettiSulloSchermo = new List<Ostacolo>();
private static int objectCount = 20;
private static Random rand = new Random();
#endregion
#region Metodi ausiliari
public static void Inizializza()
{
oggettiSulloSchermo.Clear();
for (int i = 0; i < objectCount; i++)
{
//Dalla lista degli ostacoli ne creo tot a caso. Lo faccio da ostacoli e non da texture per l'eventualità in cui abbiano dimensioni diverse ecc
int randIndex = rand.Next(0, ostacoli.Count());
Ostacolo o = new Ostacolo(
ostacoli[randIndex].Texture,
ostacoli[randIndex].Strada,
ostacoli[randIndex].DrawDepth
);
o.resetPosition();
oggettiSulloSchermo.Add(o);
}
}
...
宣布“Ostacolo”类:
namespace MyFirstGame
{
public class Ostacolo : GameObject
{
#region Dichiarazioni
private Random rand = new Random();
private Texture2D texture;
#endregion
#region Costruttore
public Ostacolo(Texture2D texture, LayerDiSfondo strada, float profondita)
{
...
}
#endregion
当我在第一段代码中调用函数“Inizializza()”时,特别是在我做的地方:
Ostacolo o = new Ostacolo(...)
和
oggettiSulloSchermo.Add(o)
public void resetPosition()
{
WorldLocation = new Vector2(rand.Next(600, 3000), strada.doveCamminareY());
}
与
private Random rand = new Random();
我发现o每次都指向同一个对象! “新”关键字会创建一个新对象,不是吗?
答案 0 :(得分:5)
您正在Random
的每个实例中创建Ostacolo
的新实例,您将在restPosition
内使用“随机”定位每个实例。使此实例static
解决出现的问题:
Random
使用系统时间在内部初始化自己 - 所以当你在很短的时间内创建几个实例时(如你的情况),它们的行为可能完全相同!
有关详细信息,请参阅此帖子:RandomNumber method returns same number every time called