Студия Roblox, не может размещать блоки в случайном положении, когда начинается раунд - PullRequest
0 голосов
/ 01 мая 2020
local obs = game.ReplicatedStorage.Obstacles
local ob1 = obs.ob1
local ob2 = obs.ob2
local ob3 = obs.ob3
local ob4 = obs.ob4
local ob5 = obs.ob5
local ob6 = obs.ob6
local ob7 = obs.ob7
local ob8 = obs.ob8
local ob9 = obs.ob9
local ob10 = obs.ob10
local ob11 = obs.ob11
local ob12 = obs.ob12
local ob13 = obs.ob13
local ob14 = obs.ob14
local ob15 = obs.ob15

valu = true

while valu == true do
    basep.Size = Vector3.new(basep.Size.X - 0.5,basep.Size.Y,basep.Size.Z - 0.5)

    if basep.Size == Vector3.new(4, 5, 4) then
        local plrs = game.Players:GetChildren()
        for i = 1, #plrs do
            plrs[i].Character.Head.CFrame = CFrame.new(game.Workspace.lobby["spoint"].Position)
        end

        valu = false
        wait(10)
        basep.Size = Vector3.new(96, 5, 96)
        local plrs = game.Players:GetChildren()
        for i = 1, #plrs do
            local num = math.random(1,4)
            plrs[i].Character.Head.CFrame = CFrame.new(game.Workspace.teleports["part"..num].Position)
        end
        ob1.Position = Vector3.new(math.random(46,-46), -3.75, math.random(46,-46))
        ob2.Position = Vector3.new(math.random(46,-46), -3.75, math.random(46,-46))
        ob3.Position = Vector3.new(math.random(46,-46), -3.75, math.random(46,-46))
        ob4.Position = Vector3.new(math.random(46,-46), -3.75, math.random(46,-46))
        ob5.Position = Vector3.new(math.random(46,-46), -3.75, math.random(46,-46))
        ob6.Position = Vector3.new(math.random(46,-46), -3.75, math.random(46,-46))
        ob7.Position = Vector3.new(math.random(46,-46), -3.75, math.random(46,-46))
        ob8.Position = Vector3.new(math.random(46,-46), -3.75, math.random(46,-46))
        ob9.Position = Vector3.new(math.random(46,-46), -3.75, math.random(46,-46))
        ob10.Position = Vector3.new(math.random(46,-46), -3.75, math.random(46,-46))
        ob11.Position = Vector3.new(math.random(46,-46), -3.75, math.random(46,-46))
        ob12.Position = Vector3.new(math.random(46,-46), -3.75, math.random(46,-46))
        ob13.Position = Vector3.new(math.random(46,-46), -3.75, math.random(46,-46))
        ob14.Position = Vector3.new(math.random(46,-46), -3.75, math.random(46,-46))
        ob15.Position = Vector3.new(math.random(46,-46), -3.75, math.random(46,-46))
        valu = true
    end

    wait(0.1)
end

Я хотел сделать это, когда в раунде начинаются препятствия go в случайное положение x и z от 46 до -46, и y остается неизменным, но я не знаю, почему это не работает. Препятствия просто нормальные части, которые немного изменены. Нужна помощь быстро, и спасибо всем, кто помог. введите описание изображения здесь

1 Ответ

0 голосов
/ 03 мая 2020

Главное улучшение необходимо

Вместо того, чтобы

math.random(46, -46)

сделать

math.random(-46, 46)

, и оно будет работать намного лучше.

Дополнительные улучшения

1: используйте while valu вместо while valu == true; это ради простоты и читабельности. Обратите внимание, что valu может быть строкой, а valu будет классифицироваться как true для первого запуска l oop. Только если valu равно false или nil, оно будет классифицировано как false.

2: попробуйте использовать game.Players:GetPlayers() вместо game.Players:GetChildren(); функция GetPlayers() возвращает только Player Instance объектов, но не все в Players.

3: Не используйте for i = 1, #obj для этого. Вместо этого используйте for _, plr in pairs(obj), поскольку это более эффективно. Также, вместо использования plrs[i], вы можете использовать plr при использовании этого l oop.

4: Если вы используете аватары Player Choice, R15 или Rthro в своей игре, используйте Character.HumanoidRootPart вместо Character.Head, так как это лучше подходит для современных ригонов персонажей. Однако, чтобы иметь дело с аватарами R6, используйте этот скрипт:

local plr = game:GetService("Players").LocalPlayer
repeat wait() until plr.Character
plr.Character.PrimaryPart = plr.Character.HumanoidRootPart

Таким образом, это работает для всех аватаров.

5: Старайтесь не получать одно и то же значение снова и снова в al oop. Вместо использования

for _, plr in pairs(plrs) do
    plr.Character.HumanoidRootPart.CFrame = CFrame.new(game.Workspace.lobby["spoint"].Position)
end

вы должны использовать

local Pos = workspace.lobby["spoint"].CFrame
for _, plr in pairs(plrs) do
    plr.Character.HumanoidRootPart.CFrame = Pos
end

Этот код более эффективен и не индексирует одно и то же свойство снова и снова слишком много раз. Для еще лучших результатов поместите объявление переменной за пределами while valu l oop. 6: не повторяйте себя слишком много раз; использовать функцию! Попробуйте сделать

local function Pos()
    math.randomseed(workspace.DistributedGameTime) -- better random numbers
    return CFrame.new(math.random(-46, 46), -3.75, math.random(-46, 46))
end

вне l oop, а внутри l oop сделать

ob1.CFrame = Pos()

Это сделает ваши случайные числа более случайными, и вы не будете повторять сами! : D

Как только вы все это сделаете, ваш скрипт должен работать отлично! Удачного кодирования!

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