Else/Jika Berlatih 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 menciptakan bagian yang akan memberikan atau mengurangi poin di papan peringkat tergantung pada warna bagian saat disentuh. Jika biru, maka akan memberikan beberapa poin kepada pemain. Jika hijau, maka akan memberikan banyak poin. Terakhir, jika merah, maka akan mengambil poin.

Mengatur Proyek

Bagian yang memberikan poin dapat ditambahkan ke proyek mana pun di mana poin relevan. kejadian, permainan petualangan di mana pemain mengumpulkan poin.

Pelacakan Titik

Untuk mengatur proyek ini, Anda akan memerlukan papan peringkat untuk melacak poin dan bagian yang berubah warna. Kode untuk papan peringkat akan diberikan.

  1. Buat naskah baru di ServerScriptService bernama Leaderboard. Salin dan tempaste kode di bawah ini ke naskah.


    --Di ServerScriptService, buat skrip bernama PlayerSetup dengan konten di bawah ini.
    local Players = game:GetService("Players")
    local function onPlayerJoin(player)
    local leaderstats = Instance.new("Folder")
    leaderstats.Name = "leaderstats"
    leaderstats.Parent = player
    -- Contoh IntValue
    local points = Instance.new("IntValue")
    points.Name = "Points"
    points.Value = 0
    points.Parent = leaderstats
    end
    -- Lari padaPlayerJoin saat acara PlayerAdded berlari
    Players.PlayerAdded:Connect(onPlayerJoin)

Bagian Berubah Warna

Skrip akan berjalan melalui tiga warna berbeda untuk bagian. Setiap warna akan memiliki variabel untuk menyimpan nilai RGB-nya, jenis data yang mencakup set tiga angka (merah, hijau, biru) yang menciptakan warna.

  1. Buat bagian bernama PointPart dengan nama script yang ditautkan PointScript.

  2. Di PointScript, gunakan script.Parent untuk mengacu pada bagian.


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

    • Biru (Beberapa Poin): (0, 0, 255)
    • Hijau (Banyak Titik): (0, 255, 0)
    • Merah (Kalahkan 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 kecil poin, jumlah poin yang lebih besar, dan ketiga untuk menghapus 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

Menambahkan Layanan Pemain

Untuk mengumpulkan poin, Anda harus mendapatkan akses ke informasi pemain yang tersimpan di Explorer di bawah Pemain, dan ini berpisah dari objek karakter. Di sinilah informasi seperti statistik papan peringkat dapat ditemukan.

Anda dapat melakukannya dengan menambahkan layanan Pemain ke script Anda. Layanan adalah set tambahan dari fungsi pra-dibangun yang dibuat oleh insinyur Roblox untuk menghemat waktu Anda.

  1. Dapatkan layanan Pemain 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 Acara

PointsScript akan memerlukan dua fungsi. Fungsi pertama akan memberikan dan mengurangkan bagian. Fungsi kedua akan memeriksa apakah pemain telah menyentuh bagian tersebut. Fungsi ini kemudian akan terhubung dengan acara sentuh, yang berjalan setiap kali bagian itu disentuh.

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


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


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


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

    • Di dalam fungsi, periksa apakah pemain memiliki nilai. Jika ada, maka panggil givePoints(player) .
    • Di bawah fungsi, hubungkan partTouched() ke acara 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 ini. Setiap kali seorang pemain menyentuh bagian ini, Anda harus melihat pesan di Jendela Keluar yang mengatakan: #Giving player points Tips Mengatasi Masalah:

  • Periksa bahwa "Players" di game:GetService("Players") adalah bersarat dan dalam kutipan.
  • partTouched() seharusnya terhubung ke acara pointPart's Touched .

Buat Warna Loop

Untuk berlari melalui warna, script akan menggunakan waktu = loop yang mengubah warna bagian setiap beberapa detik. Kondisi untuk loop ini akan benar, jadi itu bisa berjalan tanpa batas.

  1. Pada akhir script, buat loop baru saat kondisi benar, 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)
    -- Loop melalui warna
    while true do
    end
  2. Pada dirimu memiliki, kode beberapa kali benar do loop yang mengubah pointPart menjadi variabel warna yang telah kamu buat. Jangan lupa untuk menggunakan task.wait() di antara warna. Saat selesai, periksa kode kamu terhadap versi di bawah ini.


    -- Loop melalui 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. Mainkan-ujian dan periksa bahwa semua tiga warna loop tanpa berhenti.

Tips Troubleshoot

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

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

Memberi Poin Pemain

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

Menemukan Warna Saat Ini

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

  1. Temukan givePoints() . Gunakan variabel ini untuk mengganti pesan pengujian Anda dengan variabel untuk warna poin saat ini. Variabel ini akan menentukan berapa banyak poin yang diterima pemain (atau kalah).


    local function givePoints(player)
    local currentColor = pointPart.Color
    end
  2. Untuk menghasilkan poin pemain, fungsi tersebut memerlukan akses ke papan peringkat 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 Poin pemain, yang merupakan anak dari papan peringkat mereka.


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

Memberikan atau Mengurangkan Poin

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

  1. Di dalam givePoints() , di bawah variabel, gunakan if statement untuk memeriksa apakah warna saat ini adalah biru dan jika demikian maka tambahkan smallPoints ke nilai poin 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 untuk hijau, tambahkan varian jika kondisi. Jika 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 lain untuk mengurangkan poin jika poinPart bukan biru atau 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 jika sehingga skrip tidak dapat 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. Mainkan dan periksa bahwa setiap warna memberikan poin seperti yang diharapkan. Pastikan untuk menguji semua kondisi tiga .

Memberi Pemain Umpan Balik

PointPart bekerja, tetapi pemain mungkin tidak melihat sesuatu terjadi kecuali jika mereka berada di posisi papan peringkatmereka. Perbaiki itu dengan menciptakan partikel saat PointPart dihancurkan.

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

Membuat Efek Partikel

Efek partikel akan sama dengan warna bagian ketika disentuh. Karena warna-warna ini disimpan dalam variabel, mudah untuk menggunakannya kembali.

  1. Pada givePoints() di bagian bawah, buat instansi ParticleEmitter baru. Pastikan nama instansi diucapkan dengan benar seperti yang ditunjukkan.


    local particle = Instance.new("ParticleEmitter")
    end
  2. ParticleEmitter menggunakan urutan warna untuk mengontrol propietas Warna mereka. Buat ColorSequens baru dan pas dalam warna bagian saat ini.


    -- Hancurkan bagian
    pointPart:Destroy()
    -- Menciptakan partikel
    local particle = Instance.new("ParticleEmitter")
    particle.Color = ColorSequence.new(currentColor)
  3. Partikel akan perlu menjadi orang tua untuk pemain yang menyentuhnya. Buat variabel untuk mendapatkan model Karakter pemain. Kemudian, orang tua 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() untuk beberapa 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. Mainkan game ini dan pastikan partikelnya berikut pemain setelah menyentuh setiap warna.

Tips Troubleshoot

Pada titik ini, jika partikel tidak berfungsi sebagai yang diharapkan, coba salah satu dari berikut.

  • Buat saat membuat instansi baru yang ParticleEmitter diucapkan tepat seperti yang ditunjukkan dan di dalam kutipan.
  • Saat menyertakan partikel, pastikan untuk menggunakan : di antara playerCharacter dan WaitForChild() tanpa ruang antara.

Selesaikan PointScript

Versi lengkap dari script dapat diacak di bawah ini.


local pointPart = script.Parent
--penyimpanan lokal = 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)
-- emas yang 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 emas 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 beberapa detik, dan kemudian hancurkan partikel
pointPart:Destroy()
-- Menciptakan 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. Perlu berada di bawah script.
while true do
pointPart.Color = blue
task.wait(4)
pointPart.Color = green
task.wait(3)
pointPart.Color = red
task.wait(2)
end