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

[solved] How can i do this using a loop?

i'm rotating the colors of parts of a model, making it look like a flowing rainbow, so i need it to iterate through colors in order and parts in order. i know i need to use ipairs, but that is as far as my knowledge goes. i'm wondering if i should use coroutines? i've yet to delve into coroutines and don't know how to use them yet, but i'll start learning if that is what's suggested. i've only pasted half of the script because it was more than 10000 characters. the script below works perfectly, but i would like to learn a faster and maybe more elegant way to script this. thank you for any help.


local t = 1

local a1 = script.Parent.a1
local a2 = script.Parent.a2
local a3 = script.Parent.a3
local a4 = script.Parent.a4
local a5 = script.Parent.a5
local a6 = script.Parent.a6
local a7 = script.Parent.a7
local a8 = script.Parent.a8
local a9 = script.Parent.a9
local a10 = script.Parent.a10
local a11 = script.Parent.a11
local a12 = script.Parent.a12
local a13 = script.Parent.a13
local a14 = script.Parent.a14
local a15 = script.Parent.a15
local a16 = script.Parent.a16
local a17 = script.Parent.a17
local a18 = script.Parent.a18
local a19 = script.Parent.a19
local a20  = script.Parent.a20
local a21  = script.Parent.a21
local a22  = script.Parent.a22
local a23  = script.Parent.a23
local a24  = script.Parent.a24
local a25  = script.Parent.a25
local a26  = script.Parent.a26
local a27  = script.Parent.a27
local a28  = script.Parent.a28
local a29  = script.Parent.a29
local a30  = script.Parent.a30
local a31  = script.Parent.a31
local a32  = script.Parent.a32
local a33  = script.Parent.a33
local a34  = script.Parent.a34
local a35  = script.Parent.a35
local a36  = script.Parent.a36
local a37  = script.Parent.a37
local a38  = script.Parent.a38
local a39  = script.Parent.a39
local a40  = script.Parent.a40

local colors = {}
colors[1] = "Deep orange"
colors[2] = "New Yeller"
colors[3] = "Br. yellowish green"
colors[4] = "Lime green"
colors[5] = "Shamrock"
colors[6] = "Cyan"
colors[7] = "Dark indigo"
colors[8] = "Royal purple"
colors[9] = "Eggplant"
colors[10] = "Really red"






while wait(t) do
a1.BrickColor = BrickColor.new(colors[1])
a2.BrickColor = BrickColor.new(colors[2])
a3.BrickColor = BrickColor.new(colors[3])
a4.BrickColor = BrickColor.new(colors[4])
a5.BrickColor = BrickColor.new(colors[5])
a6.BrickColor = BrickColor.new(colors[6])
a7.BrickColor = BrickColor.new(colors[7])
a8.BrickColor = BrickColor.new(colors[8])
a9.BrickColor = BrickColor.new(colors[9])
a10.BrickColor = BrickColor.new(colors[10])
a11.BrickColor = BrickColor.new(colors[1])
a12.BrickColor = BrickColor.new(colors[2])
a13.BrickColor = BrickColor.new(colors[3])
a14.BrickColor = BrickColor.new(colors[4])
a15.BrickColor = BrickColor.new(colors[5])
a16.BrickColor = BrickColor.new(colors[6])
a17.BrickColor = BrickColor.new(colors[7])
a18.BrickColor = BrickColor.new(colors[8])
a19.BrickColor = BrickColor.new(colors[9])
a20.BrickColor = BrickColor.new(colors[10])
a21.BrickColor = BrickColor.new(colors[1])
a22.BrickColor = BrickColor.new(colors[2])
a23.BrickColor = BrickColor.new(colors[3])
a24.BrickColor = BrickColor.new(colors[4])
a25.BrickColor = BrickColor.new(colors[5])
a26.BrickColor = BrickColor.new(colors[6])
a27.BrickColor = BrickColor.new(colors[7])
a28.BrickColor = BrickColor.new(colors[8])
a29.BrickColor = BrickColor.new(colors[9])
a30.BrickColor = BrickColor.new(colors[10])
a31.BrickColor = BrickColor.new(colors[1])
a32.BrickColor = BrickColor.new(colors[2])
a33.BrickColor = BrickColor.new(colors[3])
a34.BrickColor = BrickColor.new(colors[4])
a35.BrickColor = BrickColor.new(colors[5])
a36.BrickColor = BrickColor.new(colors[6])
a37.BrickColor = BrickColor.new(colors[7])
a38.BrickColor = BrickColor.new(colors[8])
a39.BrickColor = BrickColor.new(colors[9])
a40.BrickColor = BrickColor.new(colors[10])


wait(t)
a1.BrickColor = BrickColor.new(colors[2])
a2.BrickColor = BrickColor.new(colors[3])
a3.BrickColor = BrickColor.new(colors[4])
a4.BrickColor = BrickColor.new(colors[5])
a5.BrickColor = BrickColor.new(colors[6])
a6.BrickColor = BrickColor.new(colors[7])
a7.BrickColor = BrickColor.new(colors[8])
a8.BrickColor = BrickColor.new(colors[9])
a9.BrickColor = BrickColor.new(colors[10])
a10.BrickColor = BrickColor.new(colors[1])
a11.BrickColor = BrickColor.new(colors[2])
a12.BrickColor = BrickColor.new(colors[3])
a13.BrickColor = BrickColor.new(colors[4])
a14.BrickColor = BrickColor.new(colors[5])
a15.BrickColor = BrickColor.new(colors[6])
a16.BrickColor = BrickColor.new(colors[7])
a17.BrickColor = BrickColor.new(colors[8])
a18.BrickColor = BrickColor.new(colors[9])
a19.BrickColor = BrickColor.new(colors[10])
a20.BrickColor = BrickColor.new(colors[1])
a21.BrickColor = BrickColor.new(colors[2])
a22.BrickColor = BrickColor.new(colors[3])
a23.BrickColor = BrickColor.new(colors[4])
a24.BrickColor = BrickColor.new(colors[5])
a25.BrickColor = BrickColor.new(colors[6])
a26.BrickColor = BrickColor.new(colors[7])
a27.BrickColor = BrickColor.new(colors[8])
a28.BrickColor = BrickColor.new(colors[9])
a29.BrickColor = BrickColor.new(colors[10])
a30.BrickColor = BrickColor.new(colors[1])
a31.BrickColor = BrickColor.new(colors[2])
a32.BrickColor = BrickColor.new(colors[3])
a33.BrickColor = BrickColor.new(colors[4])
a34.BrickColor = BrickColor.new(colors[5])
a35.BrickColor = BrickColor.new(colors[6])
a36.BrickColor = BrickColor.new(colors[7])
a37.BrickColor = BrickColor.new(colors[8])
a38.BrickColor = BrickColor.new(colors[9])
a39.BrickColor = BrickColor.new(colors[10])
a40.BrickColor = BrickColor.new(colors[1])

wait(t)
a1.BrickColor = BrickColor.new(colors[3])
a2.BrickColor = BrickColor.new(colors[4])
a3.BrickColor = BrickColor.new(colors[5])
a4.BrickColor = BrickColor.new(colors[6])
a5.BrickColor = BrickColor.new(colors[7])
a6.BrickColor = BrickColor.new(colors[8])
a7.BrickColor = BrickColor.new(colors[9])
a8.BrickColor = BrickColor.new(colors[10])
a9.BrickColor = BrickColor.new(colors[1])
a10.BrickColor = BrickColor.new(colors[2])
a11.BrickColor = BrickColor.new(colors[3])
a12.BrickColor = BrickColor.new(colors[4])
a13.BrickColor = BrickColor.new(colors[5])
a14.BrickColor = BrickColor.new(colors[6])
a15.BrickColor = BrickColor.new(colors[7])
a16.BrickColor = BrickColor.new(colors[8])
a17.BrickColor = BrickColor.new(colors[9])
a18.BrickColor = BrickColor.new(colors[10])
a19.BrickColor = BrickColor.new(colors[1])
a20.BrickColor = BrickColor.new(colors[2])
a21.BrickColor = BrickColor.new(colors[3])
a22.BrickColor = BrickColor.new(colors[4])
a23.BrickColor = BrickColor.new(colors[5])
a24.BrickColor = BrickColor.new(colors[6])
a25.BrickColor = BrickColor.new(colors[7])
a26.BrickColor = BrickColor.new(colors[8])
a27.BrickColor = BrickColor.new(colors[9])
a28.BrickColor = BrickColor.new(colors[10])
a29.BrickColor = BrickColor.new(colors[1])
a30.BrickColor = BrickColor.new(colors[2])
a31.BrickColor = BrickColor.new(colors[3])
a32.BrickColor = BrickColor.new(colors[4])
a33.BrickColor = BrickColor.new(colors[5])
a34.BrickColor = BrickColor.new(colors[6])
a35.BrickColor = BrickColor.new(colors[7])
a36.BrickColor = BrickColor.new(colors[8])
a37.BrickColor = BrickColor.new(colors[9])
a38.BrickColor = BrickColor.new(colors[10])
a39.BrickColor = BrickColor.new(colors[1])
a40.BrickColor = BrickColor.new(colors[2])

wait(t)
a1.BrickColor = BrickColor.new(colors[4])
a2.BrickColor = BrickColor.new(colors[5])
a3.BrickColor = BrickColor.new(colors[6])
a4.BrickColor = BrickColor.new(colors[7])
a5.BrickColor = BrickColor.new(colors[8])
a6.BrickColor = BrickColor.new(colors[9])
a7.BrickColor = BrickColor.new(colors[10])
a8.BrickColor = BrickColor.new(colors[1])
a9.BrickColor = BrickColor.new(colors[2])
a10.BrickColor = BrickColor.new(colors[3])
a11.BrickColor = BrickColor.new(colors[4])
a12.BrickColor = BrickColor.new(colors[5])
a13.BrickColor = BrickColor.new(colors[6])
a14.BrickColor = BrickColor.new(colors[7])
a15.BrickColor = BrickColor.new(colors[8])
a16.BrickColor = BrickColor.new(colors[9])
a17.BrickColor = BrickColor.new(colors[10])
a18.BrickColor = BrickColor.new(colors[1])
a19.BrickColor = BrickColor.new(colors[2])
a20.BrickColor = BrickColor.new(colors[3])
a21.BrickColor = BrickColor.new(colors[4])
a22.BrickColor = BrickColor.new(colors[5])
a23.BrickColor = BrickColor.new(colors[6])
a24.BrickColor = BrickColor.new(colors[7])
a25.BrickColor = BrickColor.new(colors[8])
a26.BrickColor = BrickColor.new(colors[9])
a27.BrickColor = BrickColor.new(colors[10])
a28.BrickColor = BrickColor.new(colors[1])
a29.BrickColor = BrickColor.new(colors[2])
a30.BrickColor = BrickColor.new(colors[3])
a31.BrickColor = BrickColor.new(colors[4])
a32.BrickColor = BrickColor.new(colors[5])
a33.BrickColor = BrickColor.new(colors[6])
a34.BrickColor = BrickColor.new(colors[7])
a35.BrickColor = BrickColor.new(colors[8])
a36.BrickColor = BrickColor.new(colors[9])
a37.BrickColor = BrickColor.new(colors[10])
a38.BrickColor = BrickColor.new(colors[1])
a39.BrickColor = BrickColor.new(colors[2])
a40.BrickColor = BrickColor.new(colors[3])
 end

here's the solved script

local colors = {}
colors[1] = "Deep orange"
colors[2] = "New Yeller"
colors[3] = "Br. yellowish green"
colors[4] = "Lime green"
colors[5] = "Shamrock"
colors[6] = "Cyan"
colors[7] = "Dark indigo"
colors[8] = "Royal purple"
colors[9] = "Eggplant"
colors[10] = "Really red"



local parts = {} -- start with an empty list
-- Fill the empty list:
for i = 1, 40 do
    parts[i] = script.Parent["a" .. i]
end


while wait(1) do
for t = 0, #colors - 1 do
    -- advance by `t` colors:
    for i, part in pairs(parts) do
        local color = (i + t) % 10
        if color == 0 then
            color = 10
        end
        part.BrickColor = BrickColor.new(colors[color])
    end
    wait(1)
end
end

1 answer

✓ Accepted answer

No coroutines! Coroutines don't make your life easier!


Making a List

Instead of making variables a1, a2, ..., a40, you should make a list. You'll instead use a[1], a[2], ..., a[40]. I'm going to call it "parts" though since that's a much better name.

If you want to keep using the names of the bricks like you are, it's pretty easy to do that:

local parts = {} -- start with an empty list
-- Fill the empty list:
for i = 1, 40 do
	parts[i] = script.Parent["a" .. i]
end

If you don't want to have to name all of your parts individually in order, you can make a script figure it out for you. For example, if the bricks are numbered 1 to 40 increasing in X, you could just get children and sort:

local parts = {}
-- Add all of the parts in `script.Parent` to `parts`
for _, child in pairs(script.Parent:GetChildren()) do
	if child:IsA("BasePart") then
		table.insert(parts, child)
	end
end
-- Sort by X position:
table.sort(parts, function(a, b) return a.Position.x < b.Position.x end)

Setting the Colors

If you just wanted to set the colors of each part to something, it would look like this:

for i, part in pairs(parts) do
	-- for each `part` in the list `parts`, do this:
	part.BrickColor = BrickColor.new("Bright red")
end

This would make every brick red. But you want to grab from a list of colors.

This should vary based on the i --- the first part gets an i of 1, the second 2, etc.

A way to make the 1, 2, 3, ..., 9, 10, 1, 2, 3, ..., 9, 10, 1, 2, 3 is to use modulo -- remainder after division.

i % 10 will be 1, 2, 3, ..., 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, .... Unfortunately that uses 0 instead of 10, so you can just add a check for that:

for i, part in pairs(parts) do
	local color = i % 10
	if color == 0 then
		color = 10
	end
	part.BrickColor = BrickColor.new(colors[color])
end

finally, you wanted to make the rainbow "move". One way to do that would be "rotate" (renumber by 1) the list of either colors or parts. You can do that by just adding to i:

for t = 0, #colors - 1 do
	-- advance by `t` colors:
	for i, part in pairs(parts) do
		local color = (i + t) % 10
		if color == 0 then
			color = 10
		end
		part.BrickColor = BrickColor.new(colors[color])
	end
	wait(1)
end

1 comment

0

great. this works :) thx for the fast response

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