У меня есть игра в 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 ...) внутри таблицы указывает на фактический объект в игре?
Спасибо