Kayan Lazerler
Coddy'nin Roblox Oyunu: Sonsuz Kule kursunda ders 8 / 18.
Lasers aşamasında, Slider ve Kill etiketli, yürüyüş yolunda ileri geri kayan iki kırmızı duvar bulunur. Her birinde, nereden başladığına göre nereye gideceğini belirten bir Vector3 olan Slide özniteliği vardır.
Bir tween tekrarlanabilir. TweenInfo.new süreyi, easing türünü, yönü, kaç kez tekrarlanacağını (-1 sonsuza kadar anlamına gelir) ve animasyonun ters yönde oynatılıp oynatılmayacağını alır:
local info = TweenInfo.new(2.5, Enum.EasingStyle.Linear, Enum.EasingDirection.InOut, -1, true)
TweenService:Create(part, info, { Position = part.Position + part:GetAttribute("Slide") }):Play()Linear, hızın sabit kalmasını sağlar; böylece oyuncu hareketin zamanlamasını kestirebilir. Varsayılan easing, her uçta yavaşlar; bu akıcı görünür ama zamanlamayı kestirmek zordur.
Görev
Orta- Üst kısımlarda
TweenService'i al. makeSlide(part)fonksiyonunu yaz: parçanın Position değerini, Position değerineSlideözniteliğini ekleyerek elde edilen değere,Settings.SlideTimesaniyede, Linear kullanarak, sonsuza kadar tekrarlanacak ve tersine dönecek şekilde tween et.setupStageiçinde,Slideretiketi taşıyan her parça için bu fonksiyonu çağır.
Play'e bas ve lazerlerin yanından sıyrılarak geç. Ardından Check'e 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
-- Kaybolan bir basamak, biri üzerine bastıktan kısa süre sonra silikleşir ve 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
-- Spinners 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
if part:HasTag("Conveyor") then
part.AssemblyLinearVelocity = part.CFrame.LookVector * Settings.BeltSpeed
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 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.