Skrip tombol upgrade

*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 kehilangannya saat mereka meninggal, tetapi koin tidak melakukan apa pun, dan sebagian besar dunia permainan tidak dapat diakses tanpa kemampuan untuk melompat sangat tinggi.Bagian tutorial ini mengajarkan Anda cara menyelesaikan logika untuk pengalaman Anda dengan menambahkan tombol di layar yang menghabiskan koin untuk meningkatkan kekuatan lompatan.

Buat tombol upgrade

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

Untuk membuat GUI:

  1. Di jendela Explorer , tambahkan folder baru ke ReplicatedStorage , lalu ganti nama folder menjadi Instansi .Setiap objek di ReplicatedStorage dapat diakses ke klien Roblox masing-masing pemain, di mana GUI ditampilkan.
  2. Tambahkan objek ScreenGui ke folder Instansi .
  3. Pilih objek ScreenGui , lalu di jendela Properti ,
    1. Atur Nama ke JumpPurchaseGui .
    2. Nonaktifkan ResetOnSpawn untuk memastikan GUI tetap menjadi milik pemain saat mereka respawn.
  4. Di jendela Explorer , masukkan Tombol Teks ke dalam wadah JumpPurchaseGui , lalu ganti nama tombol teks menjadi Tombol Lompat .
  5. (Opsi) Kustomisasi penampilan dan posisi tombol dengan mengkonfigurasi propertinya. Saran sederhana termasuk:
    • Tetapkan properti Teks menjadi Tingkatkan Lompatan (5 Koin) .
    • Tetapkan properti Ukuran Teks menjadi 25.
    • Tetapkan Titik Anchor ke 1, 1 dan Posisi ke {1, 0},{1, 0} untuk memindahkan tombol ke sudut kanan bawah.

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

Definisikan data kekuatan lompatan

Saat ini, hanya hitungan koin yang disimpan untuk setiap pemain di skrip modul PlayerData .Anda juga perlu menyimpan dan memperbarui kekuatan lompat dengan cara yang sama.Karena fungsi di PlayerData tidak spesifik terhadap data yang diubah, semua yang diperlukan untuk menyimpan kekuatan lompatan pemain adalah menambahkan kunci Jump dan menginisialisasi nilai awalnya di DEFAULT_PLAYER_DATA.

Untuk memperbarui skrip modul Data Pemain untuk menyimpan kekuatan lompatan:

  1. Di jendela Explorer , buka skrip modul Data Pemain di ServerStorage .

  2. Ganti kode di skrip dengan sampel berikut, yang menginisialisasi nilai Jump untuk setiap pemain bersama dengan nilai Coins yang ada:


    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 lompatan

Sekarang bahwa Data Pemain mampu melacak kekuatan lompatan, Anda perlu menerapkan logika di server untuk meningkatkan kekuatan lompatan dari permintaan klien pemain.

Server dan klien dapat berkomunikasi melalui peristiwa remote atau fungsi remote.Acara remote tidak menghasilkan ketika mereka ditembak dan sesuai untuk komunikasi satu arah.Fungsi remote menghasilkan sampai mereka menerima balasan, yang memungkinkan komunikasi dua arah.Dalam kasus ini, klien perlu tahu apakah server telah meningkatkan kekuatan lompatan pemain dengan sukses, sehingga fungsi remote adalah ideal.

Untuk menerapkan upgradelompatan:

  1. Di jendela Explorer , buka folder Instansi di ReplicatedStorage .

  2. Masukkan Fungsi Jarak Jauh ke dalam folder Instansi , lalu ganti nama fungsi jarak jauh menjadi Fungsi Peningkatan Kekuatan Lompat .Anda selalu membuat fungsi remote di ReplicatedStorage karena klien dan server harus dapat mengaksesnya.

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

  4. Di jendela Properti , aktifkan properti KarakterUseJumpPower .Secara default, nilai kekuatan lompatan karakter tidak mendefinisikan jumlah yang dilompati karakter, jadi ini perlu diaktifkan.

  5. Di jendela Explorer , masukkan skrip baru ke ServerScriptService , lalu ganti nama skrip menjadi JumpService .Skrip ini akan berisi logika untuk peningkatan lompatan.

  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)
    -- Peristiwa
    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 lompatan pemain
    local character = player.Character or player.CharacterAdded:Wait()
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    humanoid.JumpPower = newJumpPower
    -- Perbarui papan peringkat lompatan
    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 lompatan pemain
    updateJumpPower(player, function(oldJumpPower)
    oldJumpPower = oldJumpPower or 0
    return oldJumpPower + JUMP_POWER_INCREMENT
    end)
    -- Perbarui meja 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 lompatan pemain saat karakter ditambahkan
    updateJumpPower(player, function(_)
    return 0
    end)
    end
    -- Inisialisasi pemain mana pun yang ditambahkan sebelum terhubung ke 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 secara lebih terperinci.

    • Perbarui data kekuatan lompatan - updateJumpPower() memperbarui kekuatan lompatan pemain dan papan peringkat untuk memberikan umpan masukanvisual.Fungsi ini mirip dengan kode yang merusak pemain di Buat bahaya pemain .Memberikan model Character dan Humanoid untuk pemain yang ditingkatkan, fungsi memperbarui properti JumpPower ke nilai baru yang disimpan oleh PlayerData , meningkatkannya sebesar 30.Jika Anda ingin permainan Anda berlangsung sedikit lebih lama, Anda dapat mengurangi angka ini.

    • Verifikasi permintaan server - onPurchaseJumpIncrease() pertama memeriksa bahwa pemain sebenarnya memiliki jumlah koin yang diperlukan untuk membeli upgrade. Semua permintaan dari klien ke server harus diverifikasi untuk mencegah aktor jahat mengirim permintaan palsu dan mengeksploitasi pengalaman Anda.

Tambahkan tombol ke GUI pemain

Sebuah objek ScreenGui hanya ditampilkan di layar jika diberikan ke objek pemain PlayerGui .Secara default, ini berisi GUI sistem seperti jendela obrolan.Sekarang Anda perlu membuat skrip di ReplicatedStorage untuk menyalin tombol upgrade ke GUI setiap pemain dan menerapkan perilaku saat ditekan.

Untuk menambahkan tombol ke GUI pemain saat mereka bergabung:

  1. Di jendela Explorer , buat Skrip di ReplicatedStorage .

  2. Pilih skrip, lalu di jendela Properti ,

    1. Atur Nama ke JumpButtonClickHandler .
    2. Tetapkan RunContext ke Klien . Ini memberi tahu mesin untuk selalu menjalankan skrip ini di klien untuk mengoptimalkan komunikasi jaringan.
  3. Dalam skrip 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 keberhasilan 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 secara lebih terperinci.

    • Dapatkan referensi ke fungsi GUI dan server - Variabel IncreaseJumpPowerFunction , jumpPurchaseGui , dan jumpButton berisi referensi ke fungsi dan GUI yang memanggil fungsi yang akan Anda butuhkan nanti.
    • Tentukan penangan acara - onButtonClicked() mendefinisikan logika saat pengguna mengklik tombol upgrade.Ini menggunakan pcall() (panggilan terlindung) untuk memanggil RemoteFunction.Komunikasi klien-server seperti ini memerlukan pcall() untuk menangani kesalahan atau masalah koneksi.
    • Hubungkan penangan ke tombol - Acara Activated kompatibel di semua platform, termasuk mouse, touchscreen, atau konteks gamepad.Ini diaktifkan ketika sebuah klik , sentuhan , atau tombol gamepad dirilis.

Pengujian Permainan

Sekarang Anda harus dapat membeli peningkatan lompat untuk koin menggunakan tombol upgrade. Untuk menguji proyek:

  1. Di bilah alat, klik tombol Mainkan . Studio memasuki mode pengujian.

    Play button highlighted in Studio's playtesting options.
  2. Jika skrip Anda berfungsi dengan benar, tombol untuk membeli kekuatan lompatan muncul di layarCoba klik tombol sebelum Anda mengumpulkan koin apa pun untuk memeriksa apakah tidak memberi Anda kekuatan lompatan tambahan, kemudian coba kumpulkan beberapa koin dan lihat apakah peningkatan berfungsi saat Anda klik lagi.

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