Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
✓ ANSWER ACCEPTED

The Mesh and ParticleEmitter Properties won't Change?

I've made a script, but none of the properties will change. No errors show up on the output.

p = Instance.new("Part", game.Workspace)
pe = Instance.new("ParticleEmitter", p)
m = Instance.new("SpecialMesh", p)

---Part---
p.Position = Vector3.new(-43.2, 2.494, -61.4)
p.Locked = "True"
p.Anchored = "True"
p.TopSurface = "Smooth"
p.BottomSurface = "Smooth"
while true do
p.BrickColor = BrickColor.random()
wait(0.5)
end

---ParticleEmitter---
pe.Lifetime = NumberRange.new(.5, 5)
pe.Speed = 5
pe.Size = NumberSequence.new(.2)

---Mesh---
m.MeshId = "http://www.roblox.com/asset/?id=21057410"
m.TextureId = "http://www.roblox.com/asset/?id=21243140"

1 answer

✓ Accepted answer

The problem is that you have an infinite while loop right before the code that edits the properties of the Mesh and the ParticleEmitter.

Programs are read from the top-down, line by line. When the program gets to the while loop, it keeps on repeating the loop until it terminates, then it goes onto the next lines of code.

The problem is that your loop never terminates, so the program never goes past the loop onto the next lines of code. The solution to that is to have the loop run as a separate process away from the main program. By doing so, you can have the loop running and the program will run whatever code is underneath it.

There are a few methods of doing that, one of which is the Coroutine. The method that I'm going to be using is far simpler, the Spawn() function.

Basically, the Spawn() function is used to run a function as a separate process away from the main program, like so:

print("Line 1")
spawn(function()
	while true do
		print("This is looping!")
		wait(1)
	end
end)
print("Line 2")

What you'll notice if you run that code is that the line after the while loop gets printed and the line inside the while loop itself get printed too. Amazing right?

To fix your code, we just need to put the while loop in a spawn() function, like so:

p = Instance.new("Part", game.Workspace)
pe = Instance.new("ParticleEmitter", p)
m = Instance.new("SpecialMesh", p)

---Part---
p.Position = Vector3.new(-43.2, 2.494, -61.4)
p.Locked = "True"
p.Anchored = "True"
p.TopSurface = "Smooth"
p.BottomSurface = "Smooth"
spawn(function()
	while true do
		p.BrickColor = BrickColor.random()
		wait(0.5)
	end
end)

---ParticleEmitter---
pe.Lifetime = NumberRange.new(.5, 5)
pe.Speed = 5
pe.Size = NumberSequence.new(.2)

---Mesh---
m.MeshId = "http://www.roblox.com/asset/?id=21057410"
m.TextureId = "http://www.roblox.com/asset/?id=21243140"

Hope this helped!

1 comment

0

Ah, thank you! I've just started getting into loops and stuff. I've been playing around with scripts and this is what I came up with. I appreciate your help.

This discussion is preserved as it was. New answers, comments, and votes are closed.