Menu
CoddyTech

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.

challenge icon

Görev

Orta
  1. Üst kısımlarda TweenService'i al.
  2. makeSlide(part) fonksiyonunu yaz: parçanın Position değerini, Position değerine Slide özniteliğini ekleyerek elde edilen değere, Settings.SlideTime saniyede, Linear kullanarak, sonsuza kadar tekrarlanacak ve tersine dönecek şekilde tween et.
  3. setupStage içinde, Slider etiketi 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()
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Roblox Oyunu: Sonsuz Kule bölümündeki tüm dersler