-2

这些是我的课:

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 每次都指向同一个对象!“New”关键字确实创建了一个新对象,不是吗?

4

1 回答 1

5

Random您将在 的每个实例中创建一个新实例Ostacolo,您将使用该实例restPosition来“随机”定位每个实例。制作此实例static以解决出现的问题:

Random使用系统时间在内部初始化自身 - 因此,当您在短时间内创建多个实例(如您的情况)时,它们的行为可能都相同!

有关详细信息,请参阅此帖子:RandomNumber 方法每次调用时返回相同的数字

于 2013-09-16T10:32:11.837 回答