Menu
CoddyTech

Tangga yang Menghilang

Pelajaran 6 dari 18 dalam kursus Game Roblox: Menara Tanpa Akhir di Coddy.

Step kaca bertanda Vanish memudar segera setelah kamu mendarat di atasnya, lalu kembali. Part dengan CanCollide nonaktif dapat dilewati, dan dengan Transparency yang tinggi, part itu tampak menghilang:

part.Transparency = 0.8
part.CanCollide = false

Touched terpanggil untuk setiap anggota tubuh yang menyentuh step, dan terpanggil lagi saat kamu jatuh menembusnya. Tanpa pemeriksaan, setiap sentuhan memulai proses memudar sendiri, sehingga step berkedip lama setelah kamu pergi. Debounce hanya mengizinkan sentuhan pertama: tandai step saat sedang sibuk, lalu abaikan sentuhan selama tanda itu masih ada.

if part:GetAttribute("Gone") then
	return
end
part:SetAttribute("Gone", true)
-- memudar, tunggu, muncul kembali
part:SetAttribute("Gone", nil)

Proses menunggu terjadi di dalam fungsi Touched. Roblox menjalankannya sendiri, jadi proses itu tidak pernah menahan bagian game lainnya.

challenge icon

Tantangan

Sedang

Tulis makeVanish(part) dan gunakan untuk setiap part yang diberi tag Vanish di setupStage. Saat sesuatu yang memiliki Humanoid menyentuh pijakan dan pijakan itu belum hilang:

  1. Atur atribut Gone menjadi true.
  2. Tunggu Settings.VanishDelay, lalu atur Transparency menjadi 0.8 dan CanCollide menjadi false.
  3. Tunggu Settings.VanishTime, lalu kembalikan nilainya menjadi 0 dan true, lalu hapus Gone (atur menjadi nil).

Tekan Play dan terus bergerak. Lalu 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 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 satu nyawa
local function killOnTouch(hit)
	local humanoid = hit.Parent:FindFirstChild("Humanoid")
	if humanoid then
		humanoid.Health = 0
	end
end

-- Spinner berputar sedikit 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
	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()
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Game Roblox: Menara Tanpa Akhir

Latihan sendiri: Playground Roblox