33. Events dan connections — Solusi PR
Cuplikan kode Roblox — tempel ke dalam Script di Studio
untuk mencobanya. File .lua ada di
exercises/33/homework/solutions/.
Soal 1 — Touched printer
Solusi.
part.Touched:Connect(function(otherPart)
print(otherPart.Name .. " touched it")
end):Connect mendaftarkan fungsinya; fungsi itu dijalankan
setiap kali ada sesuatu yang menyentuh Part, dan Part yang menyentuh
diteruskan sebagai otherPart.
Soal 2 — Sapa saat bergabung
Solusi.
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
print("Welcome, " .. player.Name .. "!")
end)PlayerAdded dipicu sekali untuk setiap pemain yang
bergabung, dan kamu mendapatkan objek player-nya.
Soal 3 — Tambah debounce
Solusi.
local collected = false
part.Touched:Connect(function(otherPart)
if collected then return end
collected = true
print("bang!")
end)return di awal melewatkan setiap sentuhan setelah yang
pertama, sehingga bang! hanya dicetak sekali.
Kesalahan umum.
- Mendeklarasikan
collecteddi dalam fungsi yang di-connect. Nilainya akan direset kefalsesetiap kali ada sentuhan dan tidak akan memblokir apa pun. Flag harus berada di luar, supaya nilainya bertahan di antara sentuhan.
Tantangan — Sentuhan khusus pemain
Solusi.
local Players = game:GetService("Players")
part.Touched:Connect(function(otherPart)
local character = otherPart.Parent
local player = Players:GetPlayerFromCharacter(character)
if player then
print(player.Name .. " scored")
end
end)GetPlayerFromCharacter mengembalikan nil
untuk apa pun yang bukan bagian dari karakter pemain, sehingga penjaga
if player mengabaikan benda-benda lain dan hanya bereaksi
terhadap pemain.
Selesai?
Kodemu sekarang bisa bereaksi terhadap dunia — sentuhan, pemain yang
bergabung, dan masih banyak lagi — dengan debounce untuk menjaganya
tetap terkendali. Selanjutnya, Services dan data model
memetakan container-container besar yang bisa diakses oleh skripmu:
Workspace, Players, dan seterusnya.