Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

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

Asked by 8 years ago

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

Log in to vote
1
Answered by
BlueTaslem 18071 Moderation Voter Administrator Community Moderator Super Administrator
8 years ago

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
0
great. this works :) thx for the fast response johnnygadget 50 — 8y
Ad

Answer this question