Menu
CoddyTech

Tumpukan Kembali

Pelajaran 4 dari 18 dalam kursus Game Roblox: Simulator Hewan Peliharaan di Coddy.

Setelah semua tumpukan hancur, koin dalam game akan habis. Tumpukan yang hancur harus kembali ke posisinya setelah Settings.RespawnTime detik.

Tumpukan harus mengingat posisinya. Tabel dengan kunci berupa tumpukan dapat melakukan itu:

local pileSpot = {} -- setiap pile -> spot tempat pile itu berada
pileSpot[pile] = spot

task.delay(seconds, fn, ...) memanggil fungsi nanti dengan argumen, tanpa menghentikan apa pun sekarang:

task.delay(Settings.RespawnTime, spawnPile, spot)

Hapus tumpukan dari tabel saat tumpukan itu hancur, agar tabel tidak menyimpan semua tumpukan yang pernah ada.

challenge icon

Tantangan

Mudah
  1. Di dekat bagian atas: local pileSpot = {}.
  2. Di dalam spawnPile, simpan pileSpot[pile] = spot.
  3. Di dalam hitPile, saat tumpukan pecah: baca lokasinya, hapus dari pileSpot, hancurkan tumpukan, lalu jalankan task.delay(Settings.RespawnTime, spawnPile, spot).

Tumpukan dalam pelajaran ini muncul kembali setelah 1 detik. Tekan Play, lalu Periksa.

Coba sendiri

local Players = game:GetService("Players")
local ServerStorage = game:GetService("ServerStorage")
local Settings = require(game.ReplicatedStorage.Settings)

local piles = workspace.Piles

print("A Meadow pile gives " .. Settings.PileValue .. " coins")

-- Setiap pemain mendapat Coins di leaderboard
Players.PlayerAdded:Connect(function(player)
	local leaderstats = Instance.new("Folder")
	leaderstats.Name = "leaderstats"
	leaderstats.Parent = player

	local coins = Instance.new("IntValue")
	coins.Name = "Coins"
	coins.Parent = leaderstats
end)

-- Klik pada tumpukan memerlukan hitPile, yang ditulis di bawah spawnPile: deklarasikan namanya
-- di sini, sebelum keduanya
local hitPile

-- Tumpukan koin di suatu titik: salinan ServerStorage.CoinPile dengan kesehatan
-- dan nilai sebagai atribut
local function spawnPile(spot)
	local pile = ServerStorage.CoinPile:Clone()
	pile.Position = spot.Position
	pile:SetAttribute("MaxHealth", Settings.PileHealth)
	pile:SetAttribute("Health", Settings.PileHealth)
	pile:SetAttribute("Value", Settings.PileValue)
	-- klik untuk memukulnya
	local detector = Instance.new("ClickDetector")
	detector.Parent = pile
	pile.Parent = piles
	detector.MouseClick:Connect(function(player)
		hitPile(player, pile)
	end)
	return pile
end

-- Satu pukulan mengurangi kesehatan tumpukan sebesar 1;
-- saat mencapai 0, tumpukan hancur dan memberikan nilainya
function hitPile(player, pile)
	local health = pile:GetAttribute("Health") - 1
	if health > 0 then
		pile:SetAttribute("Health", health)
		return
	end
	player.leaderstats.Coins.Value += pile:GetAttribute("Value")
	pile:Destroy()
end

-- Satu tumpukan di setiap titik di Meadow
for _, spot in workspace.Zones.Meadow.Spawns:GetChildren() do
	spawnPile(spot)
end
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Game Roblox: Simulator Hewan Peliharaan

Latihan sendiri: Playground Roblox