Dönen Engel
Coddy'nin Roblox Oyunu: Sonsuz Kule kursunda ders 5 / 18.
Spinner aşamasında yürüyüş yolunun üzerinden geçen kırmızı bir kol bulunur. Bu, pivotu göbeği olan ve Spinner etiketi taşıyan bir Model'dir. Her karede tüm Model'i biraz döndürmek, dönmesini sağlar.
RunService.Heartbeat her karede bir kez tetiklenir ve son kareden bu yana geçen saniye sayısını (yaklaşık 1/60) ifade eden dt değerini iletir. Her karede speed * dt kadar döndürmek, oyun ne hızda çalışırsa çalışsın, her saniye toplamda speed kadar dönüş sağlar.
CFrame, bir konum ile bir dönüşün birleşimidir. CFrame.Angles ile çarpmak onu döndürür ve açılar radyan cinsinden olduğundan, dereceleri math.rad ile dönüştür:
spinner:PivotTo(spinner:GetPivot() * CFrame.Angles(0, math.rad(90) * dt, 0))CollectionService:GetTagged("Spinner"), ServerStorage'daki şablonlar da dahil olmak üzere bu etiketi taşıyan her şeyi listeler; bu nedenle yalnızca workspace içindekileri döndür. Kol, Kill etiketi taşıdığından bir canı zaten bitirir. Bu derste her aşama bir Spinner'dır.
Görev
Orta- Üst kısma yakın bir yerde,
game:GetServiceileCollectionServiceveRunServiceservislerini al. RunService.Heartbeatolayına bağlan. Her karede, çalışma alanında bulunanSpinneretiketiyle işaretlenmiş her Model'iCFrame.Angles(0, math.rad(Settings.SpinSpeed) * dt, 0)ile döndür.
Play'e bas ve kolun yanından geçmek için zamanlamanı ayarla ya da üzerinden zıpla. Ardından Check'e bas.
Kendin dene
local Players = game:GetService("Players")
local ServerStorage = game:GetService("ServerStorage")
local Settings = require(game.ReplicatedStorage.Settings)
local stages = ServerStorage.Stages
local tower = nil
print("Each tower has " .. Settings.StageCount .. " stages")
-- Her oyuncunun liderlik tablosunda Wins değeri olur
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
-- 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 yüksekliğini 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
-- Aşağıdan yukarıya yeni bir rastgele 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.