Menu
CoddyTech

Kaybolan Basamaklar

Coddy'nin Roblox Oyunu: Sonsuz Kule kursunda ders 6 / 18.

Vanish etiketi taşıyan cam basamaklar, üzerlerine bastıktan kısa süre sonra kaybolur ve sonra geri gelir. CanCollide özelliği kapalı olan bir parçanın içinden geçilir; Transparency değeri yüksek olduğunda ise parça yok olmuş gibi görünür:

part.Transparency = 0.8
part.CanCollide = false

Touched, dokunan her uzuv için ve basamağın içinden düşerken yeniden tetiklenir. Bir kontrol olmadan, her dokunuş kendi solma işlemini başlatır ve siz gittikten çok sonra bile basamak titreyip durur. Bir debounce, yalnızca ilk dokunuşun devam etmesine izin verir: meşgulken basamağı işaretleyin ve bu işaret varken dokunuşları yok sayın.

if part:GetAttribute("Gone") then
	return
end
part:SetAttribute("Gone", true)
-- soluklaş, bekle, geri gel
part:SetAttribute("Gone", nil)

Bekleme, Roblox'un kendi başına çalıştırdığı Touched işlevinin içinde gerçekleşir; bu yüzden oyunun geri kalanını asla bekletmez.

challenge icon

Görev

Orta

makeVanish(part) yaz ve bunu setupStage içinde Vanish etiketi taşıyan her parça için kullan. Humanoid içeren bir şey basamağa dokunduğunda ve basamak henüz kaybolmamışsa:

  1. Gone özniteliğini true olarak ayarla.
  2. Settings.VanishDelay kadar bekle, ardından Transparency değerini 0.8 ve CanCollide değerini false olarak ayarla.
  3. Settings.VanishTime kadar bekle, ardından bunları sırasıyla 0 ve true olarak geri ayarla ve Gone değerini temizle (nil olarak ayarla).

Play düğmesine bas ve hareket etmeye devam et. Ardından Check düğmesine 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

-- Dönen nesneler 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
	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

-- Alttan üste 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