Bantlar
Coddy'nin Roblox Oyunu: Sonsuz Kule kursunda ders 7 / 18.
Conveyor aşamasında, Conveyor etiketi taşıyan ve seni geldiğin yöne doğru geri iten koyu renkli bir bant bulunur. Sabitlenmiş bir parça asla hareket etmez; ancak ona bir AssemblyLinearVelocity verirsen üzerinde duran her şey gerçek bir bantta olduğu gibi onunla birlikte taşınır.
Hangi yöne mi? Her parçanın bir önü vardır ve part.CFrame.LookVector, parçanın önünden dışarı doğru bakan, uzunluğu bir stud olan bir Vector3’tür. Bandın önü, yürüyüş yolunun geldiğin yönündeki kısmına bakacak şekilde çevrilmiştir:
part.AssemblyLinearVelocity = part.CFrame.LookVector * Settings.BeltSpeedParçanın kendi yönünü kullanmak, geliştiricinin bandı istediği yöne çevirebilmesini ve betiği değiştirmeden de çalışmasını sağlar.
Görev
OrtasetupStage içinde, Conveyor etiketi taşıyan her parçaya CFrame.LookVector ile Settings.BeltSpeed çarpımını AssemblyLinearVelocity olarak verin.
Play düğmesine basın ve banda karşı yürüyün. Ardından Check düğmesine basın.
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 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
-- Kaybolan bir basamak, üzerine biri bastıktan kısa süre sonra görünmez olur, ardından geri gelir
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
-- Dönen engeller 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
if part:HasTag("Vanish") then
makeVanish(part)
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
-- Aşağıdan yukarıya yeni ve rastgele 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.