Bantalan Pantul
Pelajaran 9 dari 18 dalam kursus Game Roblox: Menara Tanpa Akhir di Coddy.
Panggung Bounce memiliki pad hijau dengan tag Bounce, di bawah tepian yang terlalu tinggi untuk dijangkau dengan melompat. Mendarat di pad seharusnya melontarkanmu ke atas tepian tersebut.
Karakter bergerak menggunakan HumanoidRootPart, bagian tak terlihat di tengah tubuhnya. Atur AssemblyLinearVelocity bagian tersebut, lalu karakter akan terbang ke arah itu dan gravitasi akan membawanya turun:
root.AssemblyLinearVelocity = Vector3.new(0, 60, 0) -- 60 studs per detik, lurus ke atasTouched memberimu bagian tubuh yang mengenai pad, biasanya kaki. Parent-nya adalah karakter, yang memiliki HumanoidRootPart.
Tantangan
Sedang- Tulis
bounce(hit): jika model yang menyentuhnya memilikiHumanoidRootPart, aturAssemblyLinearVelocity-nya keVector3.new(0, Settings.BouncePower, 0). - Di
setupStage, hubungkan Touched dari setiap bagian yang diberi tagBounceke fungsi tersebut.
Tekan Play, mendaratlah di bantalan lalu arahkan karaktermu ke tepian. Kemudian tekan Check.
Coba sendiri
local Players = game:GetService("Players")
local ServerStorage = game:GetService("ServerStorage")
local CollectionService = game:GetService("CollectionService")
local RunService = game:GetService("RunService")
local TweenService = game:GetService("TweenService")
local Settings = require(game.ReplicatedStorage.Settings)
local stages = ServerStorage.Stages
local tower = nil
print("Each tower has " .. Settings.StageCount .. " stages")
-- Setiap pemain mendapat Wins di papan peringkat
Players.PlayerAdded:Connect(function(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local wins = Instance.new("IntValue")
wins.Name = "Wins"
wins.Parent = leaderstats
end)
-- Apa pun yang memiliki tag Kill mengakhiri nyawa pemain
local function killOnTouch(hit)
local humanoid = hit.Parent:FindFirstChild("Humanoid")
if humanoid then
humanoid.Health = 0
end
end
-- Pijakan yang menghilang memudar sesaat setelah seseorang menginjaknya, lalu muncul kembali
local function makeVanish(part)
part.Touched:Connect(function(hit)
if part:GetAttribute("Gone") or not hit.Parent:FindFirstChild("Humanoid") then
return
end
part:SetAttribute("Gone", true)
task.wait(Settings.VanishDelay)
part.Transparency = 0.8
part.CanCollide = false
task.wait(Settings.VanishTime)
part.Transparency = 0
part.CanCollide = true
part:SetAttribute("Gone", nil)
end)
end
-- Laser bergeser ke posisi yang ditentukan oleh Slide lalu kembali, terus-menerus
local function makeSlide(part)
local info = TweenInfo.new(Settings.SlideTime, Enum.EasingStyle.Linear, Enum.EasingDirection.InOut, -1, true)
local goal = { Position = part.Position + part:GetAttribute("Slide") }
TweenService:Create(part, info, goal):Play()
end
-- Spinner berputar sedikit pada setiap frame
RunService.Heartbeat:Connect(function(dt)
for _, spinner in CollectionService:GetTagged("Spinner") do
if spinner:IsDescendantOf(workspace) then
spinner:PivotTo(spinner:GetPivot() * CFrame.Angles(0, math.rad(Settings.SpinSpeed) * dt, 0))
end
end
end)
-- Aktifkan setiap rintangan dalam satu tahap berdasarkan tag-nya
local function setupStage(stage)
for _, part in stage:GetDescendants() do
if part:HasTag("Kill") then
part.Touched:Connect(killOnTouch)
end
if part:HasTag("Vanish") then
makeVanish(part)
end
if part:HasTag("Conveyor") then
part.AssemblyLinearVelocity = part.CFrame.LookVector * Settings.BeltSpeed
end
if part:HasTag("Slider") then
makeSlide(part)
end
end
end
-- Pilih tahap secara acak
local function pickStage()
local all = stages:GetChildren()
return all[math.random(1, #all)]
end
-- Letakkan salinan model di atas menara; kembalikan salinan dan posisi puncak yang baru
local function stack(template, bottom)
local copy = template:Clone()
local box, size = copy:GetBoundingBox()
local lift = bottom - (box.Position.Y - size.Y / 2)
copy:PivotTo(copy:GetPivot() + Vector3.new(0, lift, 0))
copy.Parent = tower
return copy, bottom + size.Y
end
-- Bangun menara acak baru dari bawah ke atas
local function buildTower()
tower = Instance.new("Model")
tower.Name = "Tower"
tower.Parent = workspace
local top = 0
for i = 1, Settings.StageCount do
local stage, newTop = stack(pickStage(), top)
top = newTop
setupStage(stage)
end
stack(ServerStorage.Finish, top)
end
buildTower()
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Game Roblox: Menara Tanpa Akhir
4Jadikan Ini Sebuah Permainan
Tahap di Papan PeringkatLatihan sendiri: Playground Roblox