Как проверить, что элемент в массиве указывает на объект в Roblox studio? - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть игра в Roblox, для которой я создаю серию платформ, таких как:

local function makePlat(pX,pY,pZ, colNum, rowNum, eliminated, number)
    local Platform = {}
    Platform.Part = Instance.new("Part", workspace) 
    Platform.Part.Position = Vector3.new(pX,pY,pZ)
    Platform.Part.Size = Vector3.new(10,1,10)
    Platform.Part.BackSurface = "Smooth"
    Platform.Part.FrontSurface = "Smooth"
    Platform.Part.BottomSurface = "Smooth"
    Platform.Part.TopSurface = "Smooth"
    Platform.Part.LeftSurface = "Smooth"
    Platform.Part.RightSurface = "Smooth"
    Platform.Part.Material = "Glass"
    Platform.Part.BrickColor = BrickColor.new("Black")
    Platform.Part.Transparency = 0
    Platform.Part.Anchored = true
    Platform.Column = colNum
    Platform.Row = rowNum
    Platform.Eliminated = false
    Platform.Number = number

    return Platform
end
local allPlats = {}
local allParts = {}
local a = 1
for i = 1, 12 do
    for j = 1, 12 do
        maPlat = makePlat(i*16,0,j*16, i, j, false, a)

        table.insert(allPlats, maPlat)
        table.insert(allParts, maPlat.Part) 
        a = a + 1
    end
end

Затем, в дальнейшем в скрипте, у меня есть функция, которая захватывает серию этих платформ и выполняет некоторые изменения на них, например так:

local function ripple(v, teamColorReady, col, row)

    local part1 = allParts[v.Number + 1]
    local part2 = allParts[v.Number + 2]
    local part3 = allParts[v.Number + 3]
    --sideGreen
    local part4 = allParts[v.Number - 1]
    local part5 = allParts[v.Number - 2]
    local part6 = allParts[v.Number - 3]
    --sideRed
    local part7 = allParts[v.Number + 12]
    local part8 = allParts[v.Number + 24]
    local part9 = allParts[v.Number + 36]
    --sideBlue
    local part10 = allParts[v.Number - 12]
    local part11 = allParts[v.Number - 24]
    local part12 = allParts[v.Number - 36]



local lapse = .1
local high = 6
local medium = 3

local fadeNone = 0
local fadeLow = .75
local fadeMed = .5
local fadeHigh = 0

    for i = 1, 7 do
        if i == 1 then
        --sideYellow
        part1.Size  = Vector3.new(10,high,10)
        part1.Transparency = fadeHigh
        part1.BrickColor = BrickColor.new(teamColorReady)
        part1.Material = "Neon"
        --sideGreen
        part4.Size  = Vector3.new(10,high,10)
        part4.BrickColor = BrickColor.new(teamColorReady)
        part4.Material = "Neon"
        --sideRed
        part7.Size  = Vector3.new(10,high,10)
        part7.BrickColor = BrickColor.new(teamColorReady)
        part7.Material = "Neon"
        --sideBlue
        part10.Size  = Vector3.new(10,high,10)
        part10.BrickColor = BrickColor.new(teamColorReady)
        part10.Material = "Neon"
        wait(lapse)
        elseif i == 2 then
        --sideYellow
        part1.Size  = Vector3.new(10,medium,10)
        part1.Transparency = fadeMed
        part2.Size = Vector3.new(10,medium,10)
        part2.Transparency = fadeMed
        part2.BrickColor = BrickColor.new(teamColorReady)
        part2.Material = "Neon"
        --sideGreen
        part4.Size  = Vector3.new(10,medium,10)
        part5.Size = Vector3.new(10,medium,10)
        part5.BrickColor = BrickColor.new(teamColorReady)
        part5.Material = "Neon"
        --sideRed
        part7.Size  = Vector3.new(10,medium,10)
        part8.Size = Vector3.new(10,medium,10)
        part8.BrickColor = BrickColor.new(teamColorReady)
        part8.Material = "Neon"
        --sideBlue
        part10.Size  = Vector3.new(10,medium,10)
        part11.Size = Vector3.new(10,medium,10)
        part11.BrickColor = BrickColor.new(teamColorReady)
        part11.Material = "Neon"
        wait(lapse)
etc...

Это для создания волнового эффекта на платформах. У меня проблема в том, что, в зависимости от того, где стоит игрок (то есть рядом с краем целого квадрата платформ), переменные part1, part2, et c ... могут не существовать. Поэтому мне нужен способ проверить, существует ли платформа, прежде чем вносить в них изменения, иначе я получу ошибку.

Я знаю, что Roblox позволяет проверить, существует ли что-то, используя

 WaitForChild() 

, и вы можете использовать это в древовидной иерархии game.workspace et c ... но вы можете не используйте это, чтобы проверить, существует ли элемент в массиве (таблица в lua).

Так, как я могу проверить эту переменную (например, part1, part2, et c ...) внутри таблицы указывает на фактический объект в игре?

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...