Menu
CoddyTech

Klik untuk Menghancurkan

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

ClickDetector cocok untuk tombol, tetapi kebanyakan game simulasi membaca klik di client, sehingga game bisa bereaksi begitu kamu mengeklik, misalnya dengan suara atau getaran, sebelum server menjawab. Mouse milik client mengetahui apa yang diklik:

local mouse = me:GetMouse()
mouse.Button1Down:Connect(function()
	print(mouse.Target) -- bagian yang diklik, atau nil
end)

Client tidak bisa menghancurkan tumpukan sendiri: server memiliki tumpukan dan koin. Client meminta melalui RemoteEvent, sebuah object yang dibuat untuk mengirim pesan antara client dan server:

-- client
remotes.Hit:FireServer(pile)
-- server: Roblox menambahkan player yang mengirimnya sebagai parameter pertama
remotes.Hit.OnServerEvent:Connect(function(player, pile)
end)

Remote tiba sesaat kemudian, seperti saat dikirim melalui jaringan. Di ponsel, ketukan sama dengan klik.

challenge icon

Tantangan

Sedang
  1. Di PetClient: local remotes = game.ReplicatedStorage:WaitForChild("Remotes"). Saat mouse menekan Button1Down, jika mouse.Target adalah part bernama CoinPile, kirimkan part itu melalui remotes.Hit.
  2. Di PetServer: local remotes = game.ReplicatedStorage.Remotes, hubungkan remotes.Hit.OnServerEvent untuk memanggil hitPile(player, pile), lalu hapus ClickDetector dari spawnPile (dan baris local hitPile: tulis local function hitPile di bawah spawnPile sebagai gantinya).

Tekan Mainkan lalu klik tumpukan. Setelah itu, tekan Periksa.

Coba sendiri

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

local piles = workspace.Piles
local pileSpot = {} -- setiap tumpukan -> tempat tumpukan itu berada

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

-- Setiap pemain mendapat Coins di papan peringkat
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
-- di sini, sebelum keduanya
local hitPile

-- Tumpukan koin di suatu tempat: salinan ServerStorage.CoinPile dengan kesehatannya
-- dan nilainya 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 memukul tumpukan
	local detector = Instance.new("ClickDetector")
	detector.Parent = pile
	pileSpot[pile] = spot
	pile.Parent = piles
	detector.MouseClick:Connect(function(player)
		hitPile(player, pile)
	end)
	return pile
end

-- Setiap pukulan mengurangi kesehatan tumpukan sebesar 1;
-- pada 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")
	local spot = pileSpot[pile]
	pileSpot[pile] = nil
	pile:Destroy()
	-- tumpukan baru di tempat yang sama beberapa detik kemudian
	task.delay(Settings.RespawnTime, spawnPile, spot)
end

-- Satu tumpukan di setiap tempat 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