Menu
CoddyTech

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.BeltSpeed

Parç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.

challenge icon

Görev

Orta

setupStage 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()
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