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 collected di dalam fungsi yang di-connect. Nilainya akan direset ke false setiap 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.