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

Buat tombol upgrade

Antarmuka 2D di Roblox biasanya terdiri dari kumpulan komponen GUI di dalam wadah GUI. Dalam hal ini, Anda hanya perlu komponen TextButton yang bertuliskan Upgrade Jump (5 Koin) di dalam wadah ScreenGui.

Siapkan GUI upgrade
Di ReplicatedStorage, buat folder bernama Instances.
Di dalam folder Instances, buat ScreenGui bernama JumpPurchaseGui dengan ResetOnSpawn dinonaktifkan.
Di dalam JumpPurchaseGui, buat TextButton bernama JumpButton dengan properti berikut:
- Teks: "Upgrade Jump (5 Koin)"
- UkuranTeks: 25
- TitikJangkar: 1, 1
- Posisi: {1, 0}, {1, 0}
Juga di dalam folder Instances, buat RemoteFunction bernama IncreaseJumpPowerFunction.
Akhirnya, di layanan StarterPlayer, aktifkan properti CharacterUseJumpPower.

Definisikan data kekuatan melompat

Saat ini, hanya jumlah koin yang disimpan untuk setiap pemain di skrip modul PlayerData. Anda juga perlu menyimpan dan memperbarui kekuatan melompat dengan cara yang sama. Karena fungsi di PlayerData tidak spesifik untuk data yang diubah, yang diperlukan untuk menyimpan kekuatan melompat pemain adalah menambahkan kunci Jump dan menginisialisasi nilai awalnya di defaultPlayerData().

Perbarui PlayerData dengan kekuatan melompat
Di ServerStorage, ganti kode ModulScript PlayerData yang ada dengan yang berikut:
```lua
local PlayerData = {}
PlayerData.COIN_KEY_NAME = "Coins"
PlayerData.JUMP_KEY_NAME = "Jump"
local playerData = {
--[[
[userId: string] = {
["Coins"] = coinAmount: number,
["Jump"] = jumpPower: number
}
--]]
}
local function defaultPlayerData()
return {
[PlayerData.COIN_KEY_NAME] = 0,
[PlayerData.JUMP_KEY_NAME] = 0,
}
end
local function getData(player)
local data = playerData[tostring(player.UserId)] or defaultPlayerData()
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 kekuatan melompat

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

Server dan klien dapat berkomunikasi melalui RemoteEvents atau RemoteFunctions. Remote events tidak menunggu saat mereka dipicu dan dapat digunakan untuk komunikasi satu arah. Remote functions, di sisi lain, menunggu sampai mereka menerima balasan, yang memungkinkan komunikasi dua arah.

Untuk tutorial ini, klien perlu tahu apakah server berhasil meningkatkan kekuatan melompat pemain, jadi Anda harus menggunakan fungsi remote.

Buat JumpService
Di ServerScriptService, buat Skrip bernama JumpService dengan kode berikut:
```lua
-- 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 melompat
local newJumpPower = PlayerData.updateValue(player, JUMP_KEY_NAME, updateFunction)
-- Perbarui kekuatan melompat pemain
local character = player.Character or player.CharacterAdded:Wait()
local humanoid = character:FindFirstChildWhichIsA("Humanoid")
if humanoid then
humanoid.JumpPower = newJumpPower
-- Perbarui papan peringkat melompat
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 melompat 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)
-- Reset kekuatan melompat pemain saat karakter ditambahkan
updateJumpPower(player, function(_)
return 0
end)
end
-- Inisialisasi pemain yang ditambahkan sebelum terhubung ke acara PlayerAdded
for _, player in Players:GetPlayers() do
onCharacterAdded(player)
end
-- Inisialisasi normal 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 dengan lebih detail.

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

  • Validasi permintaan server - onPurchaseJumpIncrease() pertama memeriksa bahwa pemain benar-benar memiliki jumlah koin yang diperlukan untuk membeli upgrade. Semua permintaan dari klien ke server harus divalidasi untuk mencegah aktor jahat mengajukan permintaan palsu dan mengeksploitasi permainan Anda.

Tambahkan tombol ke GUI pemain

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

Buat JumpButtonClickHandler
Di ReplicatedStorage, buat Skrip bernama JumpButtonClickHandler dengan RunContext diatur ke Client dan kode berikut:
```lua
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
-- purchased akan menjadi pesan kesalahan jika success adalah false
error(purchased)
elseif success and not purchased then
warn("Koin tidak cukup!")
end
end
jumpButton.Activated:Connect(onButtonClicked)
-- Tambahkan JumpPurchaseGui ke Gui pemain
jumpPurchaseGui.Parent = playerGui
```

Bagian berikut menjelaskan kode dengan lebih detail.

  • Dapatkan referensi ke GUI dan fungsi server - Variabel IncreaseJumpPowerFunction, jumpPurchaseGui, dan jumpButton berisi referensi ke fungsi dan GUI yang memanggil fungsi yang Anda perlukan nanti.
  • Tentukan penangan acara - onButtonClicked() mendefinisikan logika untuk saat pengguna mengklik tombol upgrade. Ini menggunakan pcall() (panggilan terlindungi) untuk memanggil RemoteFunction. Setiap komunikasi klien-server seperti ini memerlukan pcall() untuk menangani kesalahan atau masalah koneksi.
  • Sambungkan penangan ke tombol - Acara Activated kompatibel di semua platform, termasuk mouse, layar sentuh, atau konteks gamepad. Ini dipicu saat klik, sentuh, atau tombol gamepad dilepaskan.

Uji Coba

Pilih Test dari dropdown dan klik Play. Tombol Upgrade Jump muncul di sudut kanan bawah.

Cobalah mengklik tombol sebelum Anda mengumpulkan koin untuk memeriksa bahwa itu tidak memberi Anda kekuatan melompat tambahan, kemudian coba kumpulkan beberapa koin dan lihat apakah upgrade berfungsi saat Anda mengklik lagi.

Dengan kode selesai, cobalah menyesuaikan kesulitan: tambahkan koin jika ritme terasa lambat, atau hapus beberapa dan sembunyikan di tempat yang lebih sulit jika upgrade terlalu mudah.

©2026 Roblox Corporation. Roblox, logo Roblox, dan Powering Imagination termasuk dalam merek dagang kami yang terdaftar dan tidak terdaftar di AS dan negara lainnya.