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.
Tantangan
Sedang- Di
PetClient:local remotes = game.ReplicatedStorage:WaitForChild("Remotes"). Saat mouse menekanButton1Down, jikamouse.Targetadalah part bernamaCoinPile, kirimkan part itu melaluiremotes.Hit. - Di
PetServer:local remotes = game.ReplicatedStorage.Remotes, hubungkanremotes.Hit.OnServerEventuntuk memanggilhitPile(player, pile), lalu hapus ClickDetector darispawnPile(dan barislocal hitPile: tulislocal function hitPiledi 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
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Game Roblox: Simulator Hewan Peliharaan
2Client dan Server
Koin di LayarLatihan sendiri: Playground Roblox