显示相同粒子的粒子效果——非随机化,Monogame
Particle effect displaying same particles -- not randomizing, Monogame
当我创建粒子效果时,它们都有相同的图案。它们是旋转的,但它们都具有相同的图案和相同颜色的粒子。见图:
这是创建新 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);
}
默认情况下,Random
个实例以当前时间作为种子启动,这意味着如果您同时创建实例,将重新生成相同的数字序列 - 不要创建新实例,重用现有实例以获得更多 "randomized" 行为(在您的情况下,例如使用静态 Random
实例)。
当我创建粒子效果时,它们都有相同的图案。它们是旋转的,但它们都具有相同的图案和相同颜色的粒子。见图:
这是创建新 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);
}
默认情况下,Random
个实例以当前时间作为种子启动,这意味着如果您同时创建实例,将重新生成相同的数字序列 - 不要创建新实例,重用现有实例以获得更多 "randomized" 行为(在您的情况下,例如使用静态 Random
实例)。