这些是我的课程:
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);
}
}
...
Run Code Online (Sandbox Code Playgroud)
宣布"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
Run Code Online (Sandbox Code Playgroud)
当在第一个代码块中,我调用函数"Inizializza()"时,特别是在我做的地方:
Ostacolo o = new Ostacolo(...)
Run Code Online (Sandbox Code Playgroud)
和
oggettiSulloSchermo.Add(o)
public void resetPosition()
{
WorldLocation = new Vector2(rand.Next(600, 3000), strada.doveCamminareY());
}
Run Code Online (Sandbox Code Playgroud)
同
private Random rand = new Random();
Run Code Online (Sandbox Code Playgroud)
我发现o每次都指向同一个对象!"新"关键字会创建一个新对象,不是吗?
您正在Random每个实例中创建一个新实例Ostacolo,您将在其中使用restPosition"随机"定位每个实例.使此实例static解决出现的问题:
Random 使用系统时间在内部初始化自己 - 所以当你在很短的时间内创建几个实例时(如你的情况),它们的行为可能都是相同的!
有关详细信息,请参阅此文章:RandomNumber方法每次调用时返回相同的数字
| 归档时间: |
|
| 查看次数: |
163 次 |
| 最近记录: |