Kaybolan Basamaklar
Coddy'nin Roblox Oyunu: Sonsuz Kule kursunda ders 6 / 18.
Vanish etiketi taşıyan cam basamaklar, üzerlerine bastıktan kısa süre sonra kaybolur ve sonra geri gelir. CanCollide özelliği kapalı olan bir parçanın içinden geçilir; Transparency değeri yüksek olduğunda ise parça yok olmuş gibi görünür:
part.Transparency = 0.8
part.CanCollide = falseTouched, dokunan her uzuv için ve basamağın içinden düşerken yeniden tetiklenir. Bir kontrol olmadan, her dokunuş kendi solma işlemini başlatır ve siz gittikten çok sonra bile basamak titreyip durur. Bir debounce, yalnızca ilk dokunuşun devam etmesine izin verir: meşgulken basamağı işaretleyin ve bu işaret varken dokunuşları yok sayın.
if part:GetAttribute("Gone") then
return
end
part:SetAttribute("Gone", true)
-- soluklaş, bekle, geri gel
part:SetAttribute("Gone", nil)Bekleme, Roblox'un kendi başına çalıştırdığı Touched işlevinin içinde gerçekleşir; bu yüzden oyunun geri kalanını asla bekletmez.
Görev
OrtamakeVanish(part) yaz ve bunu setupStage içinde Vanish etiketi taşıyan her parça için kullan. Humanoid içeren bir şey basamağa dokunduğunda ve basamak henüz kaybolmamışsa:
Goneözniteliğini true olarak ayarla.Settings.VanishDelaykadar bekle, ardından Transparency değerini 0.8 ve CanCollide değerini false olarak ayarla.Settings.VanishTimekadar bekle, ardından bunları sırasıyla 0 ve true olarak geri ayarla veGonedeğerini temizle (nil olarak ayarla).
Play düğmesine bas ve hareket etmeye devam et. Ardından Check düğmesine bas.
Kendin dene
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")
-- Her oyuncu liderlik tablosunda Wins kazanır
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)
-- Kill etiketi taşıyan her şey bir canı sona erdirir
local function killOnTouch(hit)
local humanoid = hit.Parent:FindFirstChild("Humanoid")
if humanoid then
humanoid.Health = 0
end
end
-- Dönen nesneler her karede biraz döner
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)
-- Bir aşamadaki tüm engelleri etiketlerine göre etkinleştir
local function setupStage(stage)
for _, part in stage:GetDescendants() do
if part:HasTag("Kill") then
part.Touched:Connect(killOnTouch)
end
end
end
-- Rastgele bir aşama
local function pickStage()
local all = stages:GetChildren()
return all[math.random(1, #all)]
end
-- Bir modelin kopyasını kulenin tepesine yerleştir; kopyayı ve yeni tepe noktasını döndürür
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
-- Alttan üste doğru rastgele yeni bir kule oluştur
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()
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.