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:
- 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.
- Tambahkan objek ScreenGui ke dinding Instances .
- Pilih objek ScreenGui , lalu di jendela Properti ,
- Tetapkan Nama ke JumpPurchaseGui .
- Nonaktifkan ResetOnSpawn untuk menjamin GUI tetap bersih pada pemain saat mereka respawn.
- Dalam Jendela Explorer , sisipkan Tombol Teks ke dalam JumpPurchaseGui kontainer, lalu ganti nama tombol teks menjadi 1> Tombol Jump1>.
- (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:
Dalam jendela Explorer , buka script modul PlayerData di ServerStorage .
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_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 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:
Di jendela Explorer , buka dossier Instances di ReplicatedStorage .
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.
Di jendela Explorer , pilih StarterPlayer .
Di jendela Propinsi , aktifkan property CharacterUseJumpPower . Secara default, nilai jump power karakter tidak mendefinisikan jumlah yang dilewati karakter, jadi ini perlu diaktifkan.
Di jendela Explorer , sisipkan script baru ke ServerScriptService , lalu ganti nama script menjadi JumpService . Skrip ini akan mengandung logika untuk peningkatan lompat.
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)-- Acaralocal 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 lompat pemainlocal character = player.Character or player.CharacterAdded:Wait()local humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenhumanoid.JumpPower = newJumpPower-- Perbarui papan peringkat lompatLeaderboard.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 lompat pemainupdateJumpPower(player, function(oldJumpPower)oldJumpPower = oldJumpPower or 0return oldJumpPower + JUMP_POWER_INCREMENTend)-- Perbarui tabel 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 lompat pemain saat karakter ditambahkanupdateJumpPower(player, function(_)return 0end)end-- Inisialisasi pemain mana pun yang ditambahkan sebelum mengikuti 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 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:
Dalam jendela Explorer , buat Script di ReplicatedStorage .
Pilih script, lalu di jendela Properti ,
- Tetapkan Nama ke JumpButtonClickHandler .
- Set RunContext ke Klien . Ini memberi tahu mesin untuk selalu mengeksekusi skrip ini di klien untuk mengoptimalkan komunikasi jaringan.
Dalam naskah 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 kesuksesan 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 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:
Di bilah menu, klik tombol Bermain . Studio memasuki mode pengujian.
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.