Bir yükseltme butonu oluşturun

*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.


Artık oyuncular madeni paraları toplayabiliyor ve öldüklerinde kaybedebiliyor, ancak madeni paraların bir işlevi yok ve 3D dünyanın çoğu, çok yüksek zıplama yeteneği olmadan erişilemez. Bu öğreticinin bu bölümü, ekranın üstünde madeni paraları harcayarak zıplama gücünü artıran bir buton ekleyerek oyununuzun mantığını tamamlamayı öğretir.

Yükseltme butonunu oluşturun

Roblox'taki 2D arayüzler genellikle bir GUI konteyneri içindeki GUI bileşenlerinin bir koleksiyonundan oluşur. Bu durumda, TextButton bileşenine ihtiyacınız var ve bu bileşen "Zıplamayı Yükselt (5 Madeni Para)" yazacak şekilde bir ScreenGui konteynerinin içinde yer alacak.

Yükseltme GUI'sini ayarlayın
ReplicatedStorage içinde Instances adında bir klasör oluşturun.
Instances klasörünün içinde, ResetOnSpawn devre dışı bırakılmış JumpPurchaseGui adında bir ScreenGui oluşturun.
JumpPurchaseGui içinde, aşağıdaki özelliklere sahip JumpButton adında bir TextButton oluşturun:
- Text: "Zıplamayı Yükselt (5 Madeni Para)"
- TextSize: 25
- AnchorPoint: 1, 1
- Position: {1, 0}, {1, 0}
Ayrıca Instances klasörünün içinde IncreaseJumpPowerFunction adında bir RemoteFunction oluşturun.
Son olarak, StarterPlayer hizmetinde CharacterUseJumpPower özelliğini etkinleştirin.

Zıplama gücü verilerini tanımlayın

Şu anda, her oyuncu için yalnızca madeni para sayısı PlayerData modül betiğinde saklanmaktadır. Zıplama gücünü de aynı şekilde saklayıp güncellemeniz gerekiyor. PlayerData içindeki işlevler, değiştirilen verilere özgü olmadığından, oyuncu zıplama gücünü saklamak için tek gereken, Jump anahtarını eklemek ve defaultPlayerData() içinde başlangıç değerini başlatmaktır.

Zıplama gücü ile PlayerData'yı güncelleyin
ServerStorage içinde mevcut PlayerData ModuleScript'inin kodunu aşağıdaki ile değiştirin:
```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
```

Zıplama gücü verilerini güncelleyin

Artık PlayerData zıplama gücünü takip edebildiğine göre, bir oyuncunun istemci talebinden zıplama gücünü yükseltmek için sunucuda mantık uygulamanız gerekiyor.

Sunucu ve istemci, RemoteEvents veya RemoteFunctions aracılığıyla iletişim kurabilir. Remote event'ler ateşlendiğinde beklemez ve tek yönlü iletişim için kullanılabilir. Öte yandan, remote function'lar bir yanıt alana kadar bekler, bu da iki yönlü iletişime olanak tanır.

Bu öğretici için, istemcinin sunucunun oyuncunun zıplama gücünü başarıyla yükselttiğini bilmesi gerektiğinden, bir remote function kullanmalısınız.

JumpService'i oluşturun
ServerScriptService içinde JumpService adında bir Script oluşturun ve aşağıdaki kodu ekleyin:
```lua
-- Services
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ServerStorage = game:GetService("ServerStorage")
local Players = game:GetService("Players")
-- Modules
local Leaderboard = require(ServerStorage.Leaderboard)
local PlayerData = require(ServerStorage.PlayerData)
-- Events
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)
-- Zıplama gücü tablosunu güncelle
local newJumpPower = PlayerData.updateValue(player, JUMP_KEY_NAME, updateFunction)
-- Oyuncunun zıplama gücünü güncelle
local character = player.Character or player.CharacterAdded:Wait()
local humanoid = character:FindFirstChildWhichIsA("Humanoid")
if humanoid then
humanoid.JumpPower = newJumpPower
-- Zıplama lider tahtasını güncelle
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
-- Oyuncunun zıplama gücünü artır
updateJumpPower(player, function(oldJumpPower)
oldJumpPower = oldJumpPower or 0
return oldJumpPower + JUMP_POWER_INCREMENT
end)
-- Madeni para tablosunu güncelle
local newCoinAmount = PlayerData.updateValue(player, COIN_KEY_NAME, function(oldCoinAmount)
return oldCoinAmount - JUMP_COIN_COST
end)
-- Madeni para lider tahtasını güncelle
Leaderboard.setStat(player, COIN_KEY_NAME, newCoinAmount)
return true
end
local function onCharacterAdded(player)
-- Karakter eklendiğinde oyuncunun zıplama gücünü sıfırla
updateJumpPower(player, function(_)
return 0
end)
end
-- PlayerAdded olayına bağlanmadan önce eklenen oyuncuları başlat
for _, player in Players:GetPlayers() do
onCharacterAdded(player)
end
-- PlayerAdded olayından normal oyuncu başlatma
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)
```

Aşağıdaki bölümler kodu daha ayrıntılı olarak açıklar.

  • Zıplama gücü verilerini güncelleyin - updateJumpPower() oyuncunun zıplama gücünü ve lider tahtasını güncelleyerek görsel geri bildirim sağlar. Bu işlev, oyuncuları hasar veren kodla benzerlik gösterir Oyuncu tehlikeleri oluştur. Bir Character modeli ve yükseltilen oyuncu için Humanoid mevcut olduğunda, işlev PlayerData tarafından saklanan yeni değere JumpPower özelliğini günceller ve 30 artırır. Oyununuza biraz daha uzun sürmesini istiyorsanız, bu sayıyı azaltabilirsiniz.

  • Sunucu taleplerini doğrulayın - onPurchaseJumpIncrease() önce oyuncunun yükseltmeyi satın almak için gereken madeni paraya sahip olup olmadığını kontrol eder. İstemcilerden sunucuya gelen tüm talepler doğrulanmalıdır; bu, kötü niyetli kişilerin yanlış talepler gönderip oyununuzu istismar etmesini önler.

Butonu oyuncu GUI'sine ekleyin

Bir ScreenGui nesnesi yalnızca bir oyuncunun PlayerGui nesnesine ebeveyn olduğunda ekranda gösterilir. Varsayılan olarak, bu sohbet penceresi gibi sistem GUI'sini içerir. Artık ReplicatedStorage içinde her oyuncunun GUI'sine yükseltme butonunu kopyalamak ve butona tıklandığında davranış uygulamak için bir script oluşturmanız gerekiyor.

JumpButtonClickHandler'ı oluşturun
ReplicatedStorage içinde JumpButtonClickHandler adında bir Script oluşturun ve RunContext'i Client olarak ayarlayın, ardından aşağıdaki kodu ekleyin:
```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, eğer başarı false ise hata mesajı olacaktır
error(purchased)
elseif success and not purchased then
warn("Yeterli madeni para yok!")
end
end
jumpButton.Activated:Connect(onButtonClicked)
-- JumpPurchaseGui'yi oyuncunun GUI'sine ekleyin
jumpPurchaseGui.Parent = playerGui
```

Aşağıdaki bölümler kodu daha ayrıntılı olarak açıklar.

  • GUI ve sunucu işlevine referansları elde etme - IncreaseJumpPowerFunction, jumpPurchaseGui ve jumpButton değişkenleri, daha sonra ihtiyaç duyacağınız işlev ve GUI'ye referansları içerir.
  • Olay işleyicisini tanımlayın - onButtonClicked() kullanıcılar yükseltme butonuna tıkladığında gerçekleşecek mantığı tanımlar. pcall() (korumalı çağrı) kullanarak RemoteFunction'ı çağırır. Bu tür istemci-sunucu iletişimi, hataları veya bağlantı sorunlarını ele almak için pcall() gerektirir.
  • İşleyiciyi butona bağlayın - Activated olayı, fare, dokunmatik ekran veya oyun kumandası bağlamları dahil olmak üzere tüm platformlarda uyumludur. Bir tıklama, dokunma veya oyun kumandası düğmesi serbest bırakıldığında tetiklenir.

Oyun Testi

Açılır menüden Test'i seçin ve Oyna'ya tıklayın. Zıplamayı Yükselt butonu sağ alt köşede görünür.

Hiç madeni para toplamadan önce butona tıklamayı deneyin, böylece size ek zıplama gücü vermediğinden emin olun, ardından bazı madeni paralar toplayın ve tekrar tıkladığınızda yükseltmenin çalışıp çalışmadığını görün.

Kod tamamlandığında, zorluğu ayarlamayı deneyin: tempo yavaşsa madeni paraları ekleyin veya yükseltmeler çok kolay geliyorsa birkaçını çıkarın ve daha zor noktalara yerleştirin.

©2026 Roblox Corporation. Roblox, the Roblox logo and Powering Imagination are among our registered and unregistered trademarks in the U.S. and other countries.