当我创建粒子效果时,它们都具有相同的模式。它们是旋转的,但它们都具有相同的图案和相同的有色颗粒。见图:
这是一个新的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
,但每个效果仍然相同。
如果您想查看更多代码,请注释。
编辑: 以下是粒子的绘制方式:
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);
}
答案 0 :(得分:2)
默认情况下,Random
实例以当前时间作为种子启动,这意味着如果同时创建实例,将重新生成相同的数字序列 - 不创建新实例,重用现有实例以获得更多“随机”行为(在您的情况下,例如使用静态Random
实例)。