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:
- 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.
- Tambahkan objek ScreenGui ke folder Instansi .
- Pilih objek ScreenGui , lalu di jendela Properti ,
- Atur Nama ke JumpPurchaseGui .
- Nonaktifkan ResetOnSpawn untuk memastikan GUI tetap menjadi milik pemain saat mereka respawn.
- Di jendela Explorer , masukkan Tombol Teks ke dalam wadah JumpPurchaseGui , lalu ganti nama tombol teks menjadi Tombol Lompat .
- (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:
Di jendela Explorer , buka skrip modul Data Pemain di ServerStorage .
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_DATAplayerData[tostring(player.UserId)] = datareturn dataendfunction PlayerData.getValue(player, key)return getData(player)[key]endfunction PlayerData.updateValue(player, key, updateFunction)local data = getData(player)local oldValue = data[key]local newValue = updateFunction(oldValue)data[key] = newValuereturn newValueendreturn 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:
Di jendela Explorer , buka folder Instansi di ReplicatedStorage .
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.
Di jendela Explorer , pilih StarterPlayer .
Di jendela Properti , aktifkan properti KarakterUseJumpPower .Secara default, nilai kekuatan lompatan karakter tidak mendefinisikan jumlah yang dilompati karakter, jadi ini perlu diaktifkan.
Di jendela Explorer , masukkan skrip baru ke ServerScriptService , lalu ganti nama skrip menjadi JumpService .Skrip ini akan berisi logika untuk peningkatan lompatan.
Ganti kode default dengan kode berikut:
-- Layananlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local ServerStorage = game:GetService("ServerStorage")local Players = game:GetService("Players")-- Modullocal Leaderboard = require(ServerStorage.Leaderboard)local PlayerData = require(ServerStorage.PlayerData)-- Peristiwalocal IncreaseJumpPowerFunction = ReplicatedStorage.Instances.IncreaseJumpPowerFunctionlocal JUMP_KEY_NAME = PlayerData.JUMP_KEY_NAMElocal COIN_KEY_NAME = PlayerData.COIN_KEY_NAMElocal JUMP_POWER_INCREMENT = 30local JUMP_COIN_COST = 5local function updateJumpPower(player, updateFunction)-- Perbarui tabel kekuatan lompatlocal newJumpPower = PlayerData.updateValue(player, JUMP_KEY_NAME, updateFunction)-- Perbarui kekuatan lompatan pemainlocal character = player.Character or player.CharacterAdded:Wait()local humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenhumanoid.JumpPower = newJumpPower-- Perbarui papan peringkat lompatanLeaderboard.setStat(player, JUMP_KEY_NAME, newJumpPower)endendlocal function onPurchaseJumpIncrease(player)local coinAmount = PlayerData.getValue(player, COIN_KEY_NAME)if coinAmount < JUMP_COIN_COST thenreturn falseend-- Tingkatkan kekuatan lompatan pemainupdateJumpPower(player, function(oldJumpPower)oldJumpPower = oldJumpPower or 0return oldJumpPower + JUMP_POWER_INCREMENTend)-- Perbarui meja koinlocal newCoinAmount = PlayerData.updateValue(player, COIN_KEY_NAME, function(oldCoinAmount)return oldCoinAmount - JUMP_COIN_COSTend)-- Perbarui papan peringkat koinLeaderboard.setStat(player, COIN_KEY_NAME, newCoinAmount)return trueendlocal function onCharacterAdded(player)-- Atur ulang kekuatan lompatan pemain saat karakter ditambahkanupdateJumpPower(player, function(_)return 0end)end-- Inisialisasi pemain mana pun yang ditambahkan sebelum terhubung ke acara PlayerAddedfor _, player in Players:GetPlayers() doonCharacterAdded(player)end-- Normalisasi pemain dari acara PlayerAddedlocal function onPlayerAdded(player)player.CharacterAdded:Connect(function()onCharacterAdded(player)end)endlocal function onPlayerRemoved(player)updateJumpPower(player, function(_)return nilend)endIncreaseJumpPowerFunction.OnServerInvoke = onPurchaseJumpIncreasePlayers.PlayerAdded:Connect(onPlayerAdded)Players.PlayerRemoving:Connect(onPlayerRemoved)Penjelasan kodeBagian 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:
Di jendela Explorer , buat Skrip di ReplicatedStorage .
Pilih skrip, lalu di jendela Properti ,
- Atur Nama ke JumpButtonClickHandler .
- Tetapkan RunContext ke Klien . Ini memberi tahu mesin untuk selalu menjalankan skrip ini di klien untuk mengoptimalkan komunikasi jaringan.
Dalam skrip terbuka, ganti kode default dengan kode berikut:
local ReplicatedStorage = game:GetService("ReplicatedStorage")local Players = game:GetService("Players")local player = Players.LocalPlayerlocal playerGui = player.PlayerGuilocal IncreaseJumpPowerFunction = ReplicatedStorage.Instances.IncreaseJumpPowerFunctionlocal jumpPurchaseGui = ReplicatedStorage.Instances.JumpPurchaseGuilocal jumpButton = jumpPurchaseGui.JumpButtonlocal function onButtonClicked()local success, purchased = pcall(IncreaseJumpPowerFunction.InvokeServer, IncreaseJumpPowerFunction)if not success then-- dibeli akan menjadi pesan kesalahan jika keberhasilan adalah falseerror(purchased)elseif success and not purchased thenwarn("Not enough coins!")endendjumpButton.Activated:Connect(onButtonClicked)-- Tambahkan JumpPurchaseGui ke Gui pemainjumpPurchaseGui.Parent = playerGuiPenjelasan kodeBagian 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:
Di bilah alat, klik tombol Mainkan . Studio memasuki mode pengujian.
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.