31. Dari Lua ke Luau — Solusi PR
Soal-soal ini tidak bisa dijalankan di terminal — semuanya adalah
potongan kode Roblox. Untuk mencobanya, tempel masing-masing ke dalam
Script di Roblox Studio lalu tekan
Play.
Soal 1 — Temukan perbedaannya
Contoh jawaban (minimal tiga dari):
- Lua menggunakan
io.readuntuk input; Luau membaca dari event dalam dunia game. - Lua memanggil
greetsecara langsung; Luau menghubungkannya ke sebuah event (Players.PlayerAdded:Connect(...)) dan membiarkan engine yang memanggilnya. print(...)di Lua menulis ke terminal; di Roblox ia menulis ke panel Output di dalam Studio.- Luau membaca
player.Name— sebuah properti dari sebuah Instance. Lua biasa tidak mengenal Instance sama sekali. - Luau menggunakan
game:GetService("Players")untuk menemukan service Players. Lua biasa tidak punyagamedan tidak punya service.
Tiga jawaban mana saja (atau yang serupa) sudah diterima. Logikanya sama; hanya infrastruktur di sekelilingnya yang berubah.
Soal 2 — Munculkan sebuah Part
Solusi lengkap.
local part = Instance.new("Part")
part.Size = Vector3.new(4, 1, 4)
part.Position = Vector3.new(0, 10, 0)
part.BrickColor = BrickColor.new("Bright red")
part.Anchored = true
part.Parent = workspaceUrutan itu penting: atur semua properti sebelum
Parent. Sebuah Part akan muncul begitu ia di-parent ke
workspace, jadi mengatur properti terlebih dahulu mencegah
kilatan singkat dengan ukuran atau warna yang salah.
Kesalahan umum.
- Lupa
part.Anchored = true. Tanpa itu, gravitasi akan menarik Part ke bawah. Koin dan dekorasi hampir selalu perlu di-anchor. - Lupa
Parent. Part memang ada tapi tidak masuk keworkspace, jadi tidak ada yang bisa melihatnya.
Soal 3 — Hubungkan Touched
Solusi lengkap.
part.Touched:Connect(function(other)
print(other.Name .. " touched the part")
end)Tiga hal yang perlu diperhatikan:
:Connect(...)mendaftarkan fungsinya; bukan menjalankannya. Fungsi itu baru dijalankan nanti, saat event terjadi.- Fungsi menerima objek yang menyentuh sebagai satu-satunya argumen —
sering dinamai
other,hit, atauotherPart. - Di Roblox,
printmenulis ke panel Output di dalam Studio, bukan ke terminal.
Kesalahan umum.
- Menulis
part.Touched(function ...)tanpa:Connect. Itu adalah error —Touchedadalah sebuah event, bukan fungsi yang bisa dipanggil langsung. - Menggunakan
Touched:Wait()alih-alih:Connect.:Wait()hanya menangkap satu sentuhan, lalu berhenti. Untuk event yang harus terus aktif, gunakan:Connect.
Tantangan — Part berkedip
Solusi lengkap.
local part = workspace.BlinkPart -- assume a Part named BlinkPart
local red = BrickColor.new("Bright red")
local blue = BrickColor.new("Bright blue")
while true do
part.BrickColor = red
print("red")
task.wait(1)
part.BrickColor = blue
print("blue")
task.wait(1)
endtask.wait(1) menjeda script selama satu detik. Saat
dijeda, Roblox tetap menjalankan semua hal lain — fisika, script lain,
input pemain. Ketika satu detik selesai, script dilanjutkan dari baris
setelah task.wait.
Perulangannya adalah while true karena Part seharusnya
berkedip selamanya. Roblox menghentikan script saat game dihentikan,
jadi kamu tidak perlu mengatur cara keluar yang bersih.
Kesalahan umum.
- Menggunakan
wait(1)versi lama (tanpa awalantask.). Masih berfungsi tapi itu adalah bentuk lama — kurang akurat dan sudah mulai ditinggalkan. Gunakantask.wait. - Lupa
task.wait, sehingga perulangan tak terbatas mengunci Studio. Selalu letakkan wait di dalam perulanganwhile true.
Selesai?
Empat bab berikutnya akan membahas Roblox lebih dalam — Instances dan Explorer, Events dan koneksi, Services dan data model, serta leaderstats dan value objects — kemudian dua mini-proyek di Bagian 7, yaitu Touch-to-Collect Coin dan Collect-All-Coins, akan mewujudkan semuanya dalam scene Studio yang sesungguhnya.