Latihan Else/if dengan memberikan poin

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.

Proyek ini akan menggunakan pernyataan kondisional untuk membuat sebuah bagian yang akan memberikan atau mengurangi poin di papan skor tergantung pada warna bagian tersebut saat disentuh. Jika biru, maka akan memberikan sedikit poin kepada pemain. Jika hijau, maka akan memberikan banyak poin. Terakhir, jika merah, maka akan mengurangi poin.

Siapkan proyek

Bagian yang memberikan poin dapat ditambahkan ke dalam proyek apa pun di mana poin relevan. Misalnya, sebuah permainan petualangan di mana pemain mengumpulkan poin.

Pelacakan poin

Untuk menyiapkan proyek ini, Anda memerlukan papan skor untuk melacak poin dan sebuah bagian yang berubah warna. Kode untuk papan skor akan disediakan.

  1. Buat skrip baru di ServerScriptService bernama Leaderboard. Salin dan tempel kode di bawah ini ke dalam skrip.


    --Di ServerScriptService, buat skrip bernama PlayerSetup dengan konten di bawah.
    local Players = game:GetService("Players")
    local function onPlayerJoin(player)
    local leaderstats = Instance.new("Folder")
    leaderstats.Name = "leaderstats"
    leaderstats.Parent = player
    -- Contoh dari IntValue
    local points = Instance.new("IntValue")
    points.Name = "Points"
    points.Value = 0
    points.Parent = leaderstats
    end
    -- Jalankan onPlayerJoin ketika event PlayerAdded terjadi
    Players.PlayerAdded:Connect(onPlayerJoin)

Bagian yang mengubah warna

Skrip ini akan berputar melalui tiga warna berbeda untuk bagian tersebut. Setiap warna akan memiliki variabel untuk menyimpan nilai RGB-nya, sebuah tipe data yang mencakup serangkaian tiga angka (merah, hijau, biru) yang membuat warna.

  1. Buat sebuah bagian bernama PointPart dengan skrip terlampir bernama PointScript.

  2. Di PointScript, gunakan script.Parent untuk merujuk ke bagian tersebut.


    local pointPart = script.Parent
  3. Buat variabel untuk menyimpan warna yang berbeda. Setiap variabel harus diatur ke Color3.fromRGB(), yang membuat nilai warna.

    • Biru (Beberapa Poin): (0, 0, 255)
    • Hijau (Banyak Poin): (0, 255, 0)
    • Merah (Hilang Poin): (255, 0, 0)

    local pointPart = script.Parent
    -- Warna
    local blue = Color3.fromRGB(0, 0, 255)
    local green = Color3.fromRGB(0, 255, 0)
    local red = Color3.fromRGB(255, 0, 0)
  4. Tambahkan variabel untuk jumlah poin yang kecil, jumlah poin yang lebih besar, dan satu untuk mengurangi poin.


    -- Warna
    local blue = Color3.fromRGB(0, 0, 255)
    local green = Color3.fromRGB(0, 255, 0)
    local red = Color3.fromRGB(255, 0, 0)
    -- Nilai poin
    local smallPoints = 10
    local largePoints = 50
    local losePoints = 100

Tambahkan layanan pemain

Untuk memberikan poin, Anda perlu mengakses informasi pemain yang disimpan di Explorer di bawah Players, dan terpisah dari objek karakter. Di sinilah informasi seperti statistik papan skor dapat ditemukan.

Anda dapat melakukannya dengan menambahkan layanan Players ke dalam skrip Anda. Layanan adalah tambahan set fungsi yang telah dibuat oleh insinyur Roblox untuk menghemat waktu Anda.

  1. Dapatkan layanan Players dengan mengetik:

    local Players = game:GetService("Players")


    -- Nilai poin
    local smallPoints = 10
    local largePoints = 50
    local losePoints = 100
    -- Layanan yang dibutuhkan
    local Players = game:GetService("Players")

Fungsi dan event

PointScript akan memerlukan dua fungsi. Fungsi pertama akan memberikan dan mengurangi poin. Fungsi kedua akan memeriksa apakah seorang pemain telah menyentuh bagian tersebut. Fungsi-fungsi ini kemudian akan dihubungkan dengan event sentuh, yang dijalankan setiap kali bagian tersebut disentuh.

  1. Buat fungsi baru bernama givePoints() dan parameter bernama player. Di dalamnya, tambahkan pernyataan cetak untuk digunakan dalam pengujian.


    local Players = game:GetService("Players")
    -- Memberikan atau mengurangi poin
    local function givePoints(player)
    print("Memberikan poin kepada pemain")
    end
  2. Di bawah itu, buat fungsi kedua bernama partTouched() dengan parameter bernama otherPart.


    -- Memberikan atau mengurangi poin
    local function givePoints(player)
    print("Memberikan poin kepada pemain")
    end
    -- Memeriksa apakah pemain menyentuh bagian
    local function partTouched(otherPart)
    end
  3. Di dalam fungsi ini, gunakan fungsi GetPlayerFromCharacter() untuk memeriksa apakah ada pemain di variabel otherPart.


    -- Memeriksa apakah pemain menyentuh bagian
    local function partTouched(otherPart)
    local player = Players:GetPlayerFromCharacter(otherPart.Parent)
    end
  4. Jika seorang pemain menyentuh bagian tersebut, maka akan disimpan di dalam variabel player. Jika tidak, variabel tersebut akan tetap kosong. Secara mandiri:

    • Di dalam fungsi, periksa apakah pemain memiliki nilai. Jika ada, maka panggil givePoints(player).
    • Di bawah fungsi, hubungkan partTouched() ke event Touched dari pointPart.

    -- Memeriksa apakah pemain menyentuh bagian
    local function partTouched(otherPart)
    -- Mendapatkan pemain jika salah satu menyentuh bagian
    local player = Players:GetPlayerFromCharacter(otherPart.Parent)
    if player then
    givePoints(player)
    end
    end
    pointPart.Touched:Connect(partTouched)
  5. Jalankan proyek tersebut. Setiap kali seorang pemain menyentuh bagian tersebut, Anda harus melihat pesan di jendela Output yang mengatakan: "Memberikan poin kepada pemain"

Tips Pemecahan Masalah:

  • Periksa bahwa "Players" dalam game:GetService("Players") menggunakan huruf kapital dan dalam tanda kutip.
  • partTouched() harus terhubung ke event Touched dari pointPart.

Buat Warna yang Berulang

Untuk mengulangi warna, skrip akan menggunakan loop while yang mengubah warna bagian setiap beberapa detik. Kondisi untuk loop ini akan selalu benar, sehingga dapat berjalan terus menerus.

  1. Di akhir skrip, buatlah sebuah loop while baru di mana kondisinya adalah true, yang berarti loop selalu berjalan.


    -- Memeriksa apakah pemain menyentuh bagian
    local function partTouched(otherPart)
    -- Mendapatkan pemain jika salah satu menyentuh bagian
    local player = Players:GetPlayerFromCharacter(otherPart.Parent)
    if player then
    givePoints(player)
    end
    end
    pointPart.Touched:Connect(partTouched)
    -- Mengulangi warna
    while true do
    end
  2. Secara mandiri, buatlah kode loop while true do yang mengubah pointPart menjadi variabel warna yang telah Anda buat. Jangan lupa menggunakan task.wait() di antara warna. Setelah selesai, periksa kode Anda dengan versi di bawah.


    -- Mengulangi 3 warna, menunggu di antara setiap warna
    while true do
    pointPart.Color = blue
    task.wait(3)
    pointPart.Color = green
    task.wait(2)
    pointPart.Color = red
    task.wait(1)
    end
  3. Uji permainan dan periksa bahwa semua tiga warna berulang tanpa henti.

Tips Pemecahan Masalah

Pada titik ini, jika pengulangan warna tidak bekerja seperti yang diharapkan, coba salah satu dari berikut ini.

  • Periksa bahwa loop while berada di bawah skrip, di bawah event Touched. Jika loop tidak berada di bagian bawah, maka akan menghalangi bagian lain dari skrip berjalan dengan benar.
  • Periksa bahwa setiap warna di dalam Color3.fromRGB() dituliskan dengan benar. Harus ada tiga angka antara 0 dan 255 yang dipisahkan oleh koma, seperti (255, 50, 0).

Berikan Poin kepada Pemain

Pemain akan diberikan poin berdasarkan warna saat ini dari bagian saat mereka menyentuhnya.

Temukan warna saat ini

Setiap kali seorang pemain menyentuh bagian tersebut, skrip perlu mengetahui warna saat ini dari bagian tersebut untuk memberikan poin nanti.

  1. Temukan givePoints(). Ganti pesan pengujian Anda dengan variabel untuk warna saat ini dari pointPart. Variabel ini akan menentukan berapa banyak poin yang didapat (atau hilang) oleh pemain.


    local function givePoints(player)
    local currentColor = pointPart.Color
    end
  2. Untuk mempengaruhi poin pemain, fungsi tersebut perlu mengakses papan skor pemain. Buat variabel untuk menyimpannya.


    local function givePoints(player)
    local currentColor = pointPart.Color
    local playerStats = player:WaitForChild("leaderstats")
    end
  3. Sekarang tambahkan variabel untuk mendapatkan nilai Points pemain, yang merupakan anak dari papan skor mereka.


    local function givePoints(player)
    local currentColor = pointPart.Color
    local playerStats = player:WaitForChild("leaderstats")
    local playerPoints = playerStats:WaitForChild("Points")
    end

Berikan atau Kurangi Poin

Selanjutnya, Anda akan menggunakan if dan elseif untuk memberikan atau mengurangi poin tergantung pada warna bagian saat disentuh. Ingat bahwa biru memberikan jumlah kecil, hijau memberikan banyak, dan merah mengurangi poin.

  1. Di dalam givePoints(), di bawah variabel, gunakan pernyataan if untuk memeriksa apakah warna saat ini adalah biru dan jika ya, maka tambahkan smallPoints ke nilai poin saat ini pemain.


    local function givePoints(player)
    local currentColor = pointPart.Color
    local playerStats = player:WaitForChild("leaderstats")
    local playerPoints = playerStats:WaitForChild("Points")
    if currentColor == blue then
    playerPoints.Value += smallPoints
    end
    end
  2. Untuk memeriksa warna hijau, tambahkan kondisi else if. Jika warna hijau, maka tambahkan variabel largePoints ke poin pemain.


    if currentColor == blue then
    playerPoints.Value += smallPoints
    elseif currentColor == green then
    playerPoints.Value += largePoints
    end
  3. Gunakan pernyataan else untuk mengurangi poin jika pointsPart tidak biru maupun hijau.


    if currentColor == blue then
    playerPoints.Value += smallPoints
    elseif currentColor == green then
    playerPoints.Value += largePoints
    else
    playerPoints.Value -= losePoints
    end
  4. Terakhir, hancurkan bagian setelah pernyataan if sehingga skrip tidak bisa terus memberikan poin.


    if currentColor == blue then
    playerPoints.Value += smallPoints
    elseif currentColor == green then
    playerPoints.Value += largePoints
    else
    playerPoints.Value -= losePoints
    end
    pointPart:Destroy()
  5. Uji permainan dan periksa bahwa setiap warna memberikan poin sesuai harapan. Pastikan untuk menguji semua tiga kondisi.

Berikan Umpan Balik kepada Pemain

PointPart bekerja, tetapi pemain mungkin tidak menyadari bahwa sesuatu telah terjadi kecuali mereka kebetulan melihat papan skor mereka. Perbaiki itu dengan membuat partikel saat PointPart dihancurkan.

Menambahkan umpan balik saat pemain menggunakan bagian, seperti suara, guncangan, atau partikel, membuat interaksi dengan objek lebih memuaskan bagi pemain.

Buat Efek Partikel

Efek partikel akan memiliki warna yang sama dengan bagian ketika disentuh. Karena warna tersebut disimpan dalam variabel, mudah untuk menggunakannya kembali.

  1. Di givePoints() di bagian bawah, buat sebuah instance ParticleEmitter baru. Pastikan nama instance dieja persis seperti yang ditunjukkan.


    local particle = Instance.new("ParticleEmitter")
    end
  2. ParticleEmitters menggunakan urutan warna untuk mengontrol properti Warna mereka. Buat sebuah ColorSequence baru dan masukkan warna bagian saat ini.


    -- Hancurkan bagian
    pointPart:Destroy()
    -- Buat partikel
    local particle = Instance.new("ParticleEmitter")
    particle.Color = ColorSequence.new(currentColor)
  3. Partikel perlu diparentkan ke pemain yang menyentuhnya. Buat variabel untuk mendapatkan model Karakter pemain. Kemudian, parentkan partikel ke kepala pemain.


    local particle = Instance.new("ParticleEmitter")
    particle.Color = ColorSequence.new(currentColor)
    local playerCharacter = player.Character
    particle.Parent = playerCharacter:WaitForChild("Head")
  4. Gunakan task.wait() selama satu detik, lalu hancurkan partikel.


    local particle = Instance.new("ParticleEmitter")
    particle.Color = ColorSequence.new(currentColor)
    local playerCharacter = player.Character
    particle.Parent = playerCharacter:WaitForChild("Head")
    task.wait(1)
    particle:Destroy()
  5. Uji permainan dan pastikan partikel mengikuti pemain untuk sementara setelah menyentuh setiap warna.

Tips Pemecahan Masalah

Pada titik ini, jika partikel tidak bekerja seperti yang diharapkan, coba salah satu dari berikut ini.

  • Pastikan saat membuat instance baru bahwa ParticleEmitter dieja persis seperti yang ditunjukkan dan di dalam tanda kutip.
  • Saat memparentkan partikel, pastikan untuk menggunakan : antara playerCharacter dan WaitForChild() tanpa spasi di antara.

Skrip PointScript Lengkap

Versi skrip yang telah selesai dapat dirujuk di bawah ini.


local pointPart = script.Parent
--local storage = game:GetService("ServerStorage")
-- Memberikan beberapa poin
local blue = Color3.fromRGB(0, 0, 255)
-- Memberikan lebih banyak poin
local green = Color3.fromRGB(0, 255, 0)
-- Membuat pemain kehilangan poin
local red = Color3.fromRGB(255, 0, 0)
-- poin diberikan kepada pemain
local smallPoints = 10
local largePoints = 50
local losePoints = 100
local Players = game:GetService("Players")
local function givePoints(player)
local currentColor = pointPart.Color
local playerStats = player:WaitForChild("leaderstats")
local playerPoints = playerStats:WaitForChild("Points")
-- Memberikan poin kepada pemain berdasarkan warna bagian
if currentColor == blue then
playerPoints.Value += smallPoints
elseif currentColor == green then
playerPoints.Value += largePoints
else
playerPoints.Value -= losePoints
end
-- Hancurkan bagian, tunggu sesaat, dan kemudian hancurkan partikel
pointPart:Destroy()
-- Membuat efek kilau dan menghancurkannya
local playerCharacter = player.Character
local particle = Instance.new("ParticleEmitter")
particle.Color = ColorSequence.new(currentColor)
particle.Parent = playerCharacter:WaitForChild("Head")
task.wait(1)
particle:Destroy()
end
local function partTouched(otherPart)
local player = Players:GetPlayerFromCharacter(otherPart.Parent)
if player then
givePoints(player)
end
end
pointPart.Touched:Connect(partTouched)
-- Mengubah warna bagian berdasarkan variabel. Harus berada di bawah skrip.
while true do
pointPart.Color = blue
task.wait(4)
pointPart.Color = green
task.wait(3)
pointPart.Color = red
task.wait(2)
end
©2026 Roblox Corporation. Roblox, logo Roblox, dan Powering Imagination termasuk dalam merek dagang kami yang terdaftar dan tidak terdaftar di AS dan negara lainnya.