Skrip Tombol Peningkatan

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


Pemain sekarang dapat mengumpulkan koin dan kehilangan mereka saat mereka mati, tetapi koin tidak melakukan apa-apa, dan sebagian besar dunia game tidak dapat diakses tanpa kemampuan untuk melompat sangat tinggi. Bagian ini dari tutorial menunjukkan cara menyelesaikan logika untuk pengalaman Anda dengan menambahkan tombol pada layar yang menghabiskan koin untuk meningkatkan kekuatan lompat.

Buat Tombol Peningkatan

Antarmuka 2D di Roblox biasanya terdiri dari koleksi komponen GUI di dalam wadah GUI. Dalam hal ini, Anda hanya memerlukan komponen TextButton yang mengatakan Tingkatkan Lompat (5 Koin) di dalam wadah ScreenGui.

Untuk membuat GUI:

  1. Di jendela Explorer ', tambahkan sub-folder baru ke ReplicatedStorage , lalu ganti nama sub-folder menjadi Instances . Setiap objek di 1> ReplicatedStorage 1> dapat diakses oleh klien Roblox setiap pemain, di mana GUI ditampilkan.
  2. Tambahkan objek ScreenGui ke dinding Instances .
  3. Pilih objek ScreenGui , lalu di jendela Properti ,
    1. Tetapkan Nama ke JumpPurchaseGui .
    2. Nonaktifkan ResetOnSpawn untuk menjamin GUI tetap bersih pada pemain saat mereka respawn.
  4. Dalam Jendela Explorer , sisipkan Tombol Teks ke dalam JumpPurchaseGui kontainer, lalu ganti nama tombol teks menjadi 1> Tombol Jump1>.
  5. (Opsional) Sesuaikan tampilan dan posisi tombol dengan mengkonfigurasi propnya. Sugesti sederhana termasuk:
    • Tetapkan Text properti ke Upgrade Jump (5 Koin) .
    • Tetapkan propperti TextSize ke 25 .
    • Tetapkan AnchorPoint ke 1, 1 dan Posisi ke 1, 0,1, 0 untuk menindakan tombol ke bawah sudut kanan.

Anda akan menambahkan tombol ke GUI pemain nanti dalam tutorial ini, tetapi sebelum Anda melakukannya, Anda perlu mendefinisikan semua logika dan data yang diperlukan agar tombol berfungsi.

Mendefinisikan Data Daya Loncatan

Saat ini, hanya jumlah koin yang disimpan untuk setiap pemain di PlayerData modul skrip. Anda juga perlu menyimpan dan menyetujui kekuatan lompatan di jenis yang sama. Karena fungsi di PlayerData tidak spesifik terhadap data yang diubah, semua yang dibutuhkan untuk menyim

Untuk menyimpan skrip modul PlayerData untuk menyimpan kekuatan lompat:

  1. Dalam jendela Explorer , buka script modul PlayerData di ServerStorage .

  2. Ganti kode dalam script dengan contoh berikut, yang menginisialisasi nilai Jump untuk setiap pemain berdampingan dengan nilai Coins mereka:


    local PlayerData = {}
    PlayerData.COIN_KEY_NAME = "Coins"
    PlayerData.JUMP_KEY_NAME = "Jump"
    local playerData = {
    --[[
    [userId: string] = {
    ["Coins"] = coinAmount: number,
    ["Jump"] = jumpPower: number
    }
    --]]
    }
    local DEFAULT_PLAYER_DATA = {
    [PlayerData.COIN_KEY_NAME] = 0,
    [PlayerData.JUMP_KEY_NAME] = 0,
    }
    local function getData(player)
    local data = playerData[tostring(player.UserId)] or DEFAULT_PLAYER_DATA
    playerData[tostring(player.UserId)] = data
    return data
    end
    function PlayerData.getValue(player, key)
    return getData(player)[key]
    end
    function PlayerData.updateValue(player, key, updateFunction)
    local data = getData(player)
    local oldValue = data[key]
    local newValue = updateFunction(oldValue)
    data[key] = newValue
    return newValue
    end
    return PlayerData

Perbarui Data Daya Loncatan

Sekarang bahwa PlayerData dapat melacak kekuatan lompat, Anda perlu menerapkan logika di server untuk meningkatkan kekuatan lompat dari permintaan klien pemain.

Server dan klien dapat berkomunikasi melalui salah satu Acara Remote atau Fungsi Remote. Acara remote tidak menghasilkan ketika mereka diaktifkan dan cocok untuk komunikasi satu arah. Fungsi remote diperbarui sampai mereka menerima jawaban, yang memungkinkan untuk komunikasi dua arah. Dalam kasus ini, klien perlu tahu apakah server telah meningkat

Untuk menerapkan upgradelompat:

  1. Di jendela Explorer , buka dossier Instances di ReplicatedStorage .

  2. Sisipkan RemoteFunction ke dalam Instances folder, lalu ganti nama fungsi remote ke IncreaseJumpPowerFunction . Anda selalu membuat fungsi remote di 1> ReplicatedStorage1> karena klien dan server harus dapat mengakses mereka.

    Studio's Explorer window with the IncreaseJumpPowerFunction script highlighted under the Instances folder.
  3. Di jendela Explorer , pilih StarterPlayer .

  4. Di jendela Propinsi , aktifkan property CharacterUseJumpPower . Secara default, nilai jump power karakter tidak mendefinisikan jumlah yang dilewati karakter, jadi ini perlu diaktifkan.

  5. Di jendela Explorer , sisipkan script baru ke ServerScriptService , lalu ganti nama script menjadi JumpService . Skrip ini akan mengandung logika untuk peningkatan lompat.

  6. Ganti kode default dengan kode berikut:


    -- Layanan
    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local ServerStorage = game:GetService("ServerStorage")
    local Players = game:GetService("Players")
    -- Modul
    local Leaderboard = require(ServerStorage.Leaderboard)
    local PlayerData = require(ServerStorage.PlayerData)
    -- Acara
    local IncreaseJumpPowerFunction = ReplicatedStorage.Instances.IncreaseJumpPowerFunction
    local JUMP_KEY_NAME = PlayerData.JUMP_KEY_NAME
    local COIN_KEY_NAME = PlayerData.COIN_KEY_NAME
    local JUMP_POWER_INCREMENT = 30
    local JUMP_COIN_COST = 5
    local function updateJumpPower(player, updateFunction)
    -- Perbarui tabel kekuatan lompat
    local newJumpPower = PlayerData.updateValue(player, JUMP_KEY_NAME, updateFunction)
    -- Perbarui kekuatan lompat pemain
    local character = player.Character or player.CharacterAdded:Wait()
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    humanoid.JumpPower = newJumpPower
    -- Perbarui papan peringkat lompat
    Leaderboard.setStat(player, JUMP_KEY_NAME, newJumpPower)
    end
    end
    local function onPurchaseJumpIncrease(player)
    local coinAmount = PlayerData.getValue(player, COIN_KEY_NAME)
    if coinAmount < JUMP_COIN_COST then
    return false
    end
    -- Tingkatkan kekuatan lompat pemain
    updateJumpPower(player, function(oldJumpPower)
    oldJumpPower = oldJumpPower or 0
    return oldJumpPower + JUMP_POWER_INCREMENT
    end)
    -- Perbarui tabel koin
    local newCoinAmount = PlayerData.updateValue(player, COIN_KEY_NAME, function(oldCoinAmount)
    return oldCoinAmount - JUMP_COIN_COST
    end)
    -- Perbarui papan peringkat koin
    Leaderboard.setStat(player, COIN_KEY_NAME, newCoinAmount)
    return true
    end
    local function onCharacterAdded(player)
    -- Atur ulang kekuatan lompat pemain saat karakter ditambahkan
    updateJumpPower(player, function(_)
    return 0
    end)
    end
    -- Inisialisasi pemain mana pun yang ditambahkan sebelum mengikuti acara PlayerAdded
    for _, player in Players:GetPlayers() do
    onCharacterAdded(player)
    end
    -- Normalisasi pemain dari acara PlayerAdded
    local function onPlayerAdded(player)
    player.CharacterAdded:Connect(function()
    onCharacterAdded(player)
    end)
    end
    local function onPlayerRemoved(player)
    updateJumpPower(player, function(_)
    return nil
    end)
    end
    IncreaseJumpPowerFunction.OnServerInvoke = onPurchaseJumpIncrease
    Players.PlayerAdded:Connect(onPlayerAdded)
    Players.PlayerRemoving:Connect(onPlayerRemoved)

    Bagian berikut menjelaskan kode lebih lanjut.

    • Update data kekuatan lompatan - updateJumpPower() meningkatkan kekuatan lompatan pemain dan p

    • Verifikasi permintaan server - onPurchaseJumpIncrease() pertama memeriksa bahwa pemain benar-benar memiliki jumlah koin yang diperlukan untuk membeli upgrade. Semua permintaan dari klien ke server harus dianggap valid untuk mencegah penipuan dan eksploitasi pengalaman Anda.

Tambahkan Tombol ke GUI Pemain

Objek ScreenGui hanya muncul di layar jika berada dalam pola anak pada objek PlayerGui pemain. Secara default, ini berisi sistem GUI seperti jendela chat. Anda sekarang perlu menciptakan script di ReplicatedStorage untuk menyalin tombol peningkatan ke setiap GUI pemain dan meng implementasikan perilaku untuk saat

Untuk menambahkan tombol ke GUI pemain saat mereka bergabung:

  1. Dalam jendela Explorer , buat Script di ReplicatedStorage .

  2. Pilih script, lalu di jendela Properti ,

    1. Tetapkan Nama ke JumpButtonClickHandler .
    2. Set RunContext ke Klien . Ini memberi tahu mesin untuk selalu mengeksekusi skrip ini di klien untuk mengoptimalkan komunikasi jaringan.
  3. Dalam naskah terbuka, ganti kode default dengan kode berikut:


    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
    local playerGui = player.PlayerGui
    local IncreaseJumpPowerFunction = ReplicatedStorage.Instances.IncreaseJumpPowerFunction
    local jumpPurchaseGui = ReplicatedStorage.Instances.JumpPurchaseGui
    local jumpButton = jumpPurchaseGui.JumpButton
    local function onButtonClicked()
    local success, purchased = pcall(IncreaseJumpPowerFunction.InvokeServer, IncreaseJumpPowerFunction)
    if not success then
    -- dibeli akan menjadi pesan kesalahan jika kesuksesan adalah false
    error(purchased)
    elseif success and not purchased then
    warn("Not enough coins!")
    end
    end
    jumpButton.Activated:Connect(onButtonClicked)
    -- Tambahkan JumpPurchaseGui ke Gui pemain
    jumpPurchaseGui.Parent = playerGui

    Bagian berikut menjelaskan kode lebih lanjut.

    • Dapatkan referensi ke fungsi GUI dan server. - Variabel IncreaseJumpPowerFunction , jumpPurchaseGui , dan 0> jumpButton0> mengandung referensi ke fungsi dan GUI yang memanggil fungsi yang Anda butuhkan nanti.
    • Definisikan penangani acara - onButtonClicked() mendefinisikan logika untuk ketika pengguna mengklik tombol peningkatan. Ini menggunakan pcall() (panggilan perlindung) untuk menangani 0> Class.Remote
    • Hubungkan penangani ke tombol - Acara Activated kompatibel di semua platform, termasuk mouse, touchscreen, atau gamepad context. Ini diaktifkan ketika tombol klik , touch 0>sentuh0>, atau gamepad button 3>dilepaskan 3>.

Ujian

Anda sekarang harus dapat membeli peningkatan lompat untuk koin menggunakan tombol peningkatan. Untuk menguji proyek ini:

  1. Di bilah menu, klik tombol Bermain . Studio memasuki mode pengujian.

    Studio's Home tab with the Play button highlighted in the menu bar.
  2. Jika skrip Anda bekerja dengan benar, tombol untuk membeli kekuatan lompat muncul di layar. Coba klik tombol sebelum mengumpulkan koin apa pun untuk memeriksa bahwa itu tidak memberi Anda kekuatan lompat tambahan, lalu coba mengumpulkan beberapa koin dan lihat apakah peningkatan berfungsi saat Anda klik lagi.

Sekarang kode selesai, coba keseimbangkan permainan melalui kuantitas dan posisi koin. Tambahkan lebih banyak koin jika permainan terasa terlalu lambat, atau kurangkan koin dan letakkan di tempat-tempat tantangan jika terasa terlalu cepat dan mudah.