2015-09-13 5 views
1

Когда я создаю эффекты частиц, все они имеют одинаковый узор. Они вращаются, но все они имеют одну и ту же структуру и одинаковые цветные частицы. Смотрите картину:Эффект частиц, отражающий одни и те же частицы - не рандомизация, Monogame

enter image description here

Это как новый ParticleEffect получает создано:

ParticleEffect p = new ParticleEffect(textures, Vector2.Zero, destination, speed); 

Где textures это Texture2D список, VectorZero является начальное положение, и так далее.

Всякий раз, когда новый ParticleEffect получает создан, он будет добавлен в список ParticleList, который позже петли через все пункты и вызовы update и draw для каждого эффекта внутри.

Вот где частицы рандомизированы:

private Particle GenerateNewParticle() 
{ 
    Random random = new Random(); 
    Texture2D texture = textures[random.Next(textures.Count)]; 
    Vector2 position = EmitterLocation; 
    Vector2 velocity = new Vector2(
      1f * (float)(random.NextDouble() * 2 - 1), 
      1f * (float)(random.NextDouble() * 2 - 1)); 
    float angle = 0; 
    float angularVelocity = 0.1f * (float)(random.NextDouble() * 2 - 1); 
    Color color = new Color(
      (float)random.NextDouble(), 
      (float)random.NextDouble(), 
      (float)random.NextDouble()); 
    float size = (float)random.NextDouble(); 
    int ttl = 20 + random.Next(40); 

    return new Particle(texture, position, velocity, angle, angularVelocity, color, size, ttl); 
} 

Пучок randoms там, но каждый эффект по-прежнему выходит то же самое. Комментарий, если вы хотите увидеть больше кода.

Edit: Вот как частица получает обнажена

public void Draw(SpriteBatch spriteBatch) 
{ 
    Rectangle sourceRectangle = new Rectangle(0, 0, Texture.Width, Texture.Height); 
    Vector2 origin = new Vector2(Texture.Width/2, Texture.Height/2); 

    spriteBatch.Draw(Texture, Position, sourceRectangle, Color, 
     Angle, origin, Size, SpriteEffects.None, 0f); 
} 

ответ

2

По умолчанию Random экземпляров инициируются с текущим временем, как семя, это означает, что та же последовательность чисел будет перегенерирована если вы создавать экземпляры одновременно - не создавать новые экземпляры, повторно использовать существующий экземпляр, чтобы получить более «рандомизированное» поведение (в вашем случае, например, используйте статический экземпляр Random).