Bir Yükseltme Düğmesi Script'i

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


Oyuncular artık jetonları toplayabiliyor ve öldüklerinde bunları kaybediyor, ancak jetonların hiç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ü, jeton harcayan bir ekran düğmesi ekleyerek deneyiminizin mantığını tamamlamayı öğretecek.

Yükseltme düğmesini oluşturun

Roblox'taki 2D arayüzleri, genellikle bir GUI kapsayıcısı içindeki bir dizi GUI bileşeninden oluşur. Bu durumda, bir TextButton bileşenine ihtiyacınız var ve bu bileşen "Jump'ı Yükselt (5 Jeton)" yazmalıdır ve bir ScreenGui kapsayıcısı içinde yer almalıdır.

Yükseltme GUI'sini ayarlayın

ReplicatedStorage içinde, Instances adında bir klasör oluşturun.
Instances klasörü içinde, ResetOnSpawn özelliği 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: "Jump'ı Yükselt (5 Jeton)"
- TextSize: 25
- AnchorPoint: 1, 1
- Position: {1, 0}, {1, 0}
Instances klasörünün içinde ayrıca IncreaseJumpPowerFunction adında bir RemoteFunction oluşturun.
Son olarak, StarterPlayer hizmeti üzerinde CharacterUseJumpPower özelliğini etkinleştirin.

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

Şu anda her oyuncu için yalnızca jeton sayısı PlayerData modül script'inde saklanıyor. Zıplama gücünü aynı şekilde saklamak ve güncellemek için de bunu yapmanız gerekiyor. PlayerData'daki işlevler değiştirilen verilerle özel olmadığı için, oyuncu zıplama gücünü saklamak için gereken tek şey, bir Jump anahtarı eklemek ve başlangıç değerini defaultPlayerData() içinde başlatmaktır.

Zıplama gücü ile PlayerData'yı güncelleyin

ServerStorage içinde, mevcut PlayerData ModülScript'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, sunucu üzerinde bir oyuncunun istemci talebinden zıplama gücünü yükseltmek için mantık uygulamanız gerekiyor.

Sunucu ve istemci, RemoteEvents veya RemoteFunctions üzerinden iletişim kurabilir. Uzak etkinlikler tetiklendiğinde bekleme yapmaz ve tek yönlü iletişim için kullanılabilir. Öte yandan, uzaktan işlevler yanıtı alıncaya kadar bekler ve bu, iki yönlü iletişimi sağlar.

Bu öğretici için istemcinin sunucunun oyuncunun zıplama gücünü başarılı bir şekilde yükseltip yükseltmediğini bilmesi gerektiğinden, uzaktan bir işlev kullanmalısınız.

JumpService Oluştur

ServerScriptService içinde, aşağıdaki kodu içeren JumpService adında bir Script oluşturun:
```lua
-- Servisler
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ServerStorage = game:GetService("ServerStorage")
local Players = game:GetService("Players")
-- Modüller
local Leaderboard = require(ServerStorage.Leaderboard)
local PlayerData = require(ServerStorage.PlayerData)
-- Etkinlikler
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 sıralaması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)
-- Jeton tablosunu güncelle
local newCoinAmount = PlayerData.updateValue(player, COIN_KEY_NAME, function(oldCoinAmount)
return oldCoinAmount - JUMP_COIN_COST
end)
-- Jeton sıralaması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ırlayın
updateJumpPower(player, function(_)
return 0
end)
end
-- PlayerAdded etkinliğine bağlanmadan önce eklenen oyuncuları başlat
for _, player in Players:GetPlayers() do
onCharacterAdded(player)
end
-- PlayerAdded etkinliğinden 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ü verisini güncelleyin - updateJumpPower() oyuncunun zıplama gücünü ve sıralamasını güncelleyerek görsel geri bildirim sağlar. Bu işlev, oyunculara hasar veren kodu, Oyuncu Tehlikeleri Oluştur ile benzerlik gösterir. Verilen bir Karakter modeli ve zıplama gücü artırılan Humanoid mevcutsa, işlev, PlayerData tarafından saklanan yeni değere JumpPower mülkünü günceller ve değeri 30 artırır. Oyununuza biraz daha uzun süre dayanmasını istiyorsanız, bu sayıyı azaltabilirsiniz.

  • Sunucu taleplerini doğrulayın - onPurchaseJumpIncrease() önce oyuncunun yükseltmeyi satın almak için gereken jeton sayısına gerçekten sahip olduğunu kontrol eder. İstemcilerden sunucuya gelen TÜM talepler, kötü niyetli kişilerin yanlış taleplerde bulunmasını ve oyununuzu istismar etmesini önlemek için doğrulanmalıdır.

Düğmeyi oyuncu GUI'sine ekleyin

Bir ScreenGui nesnesi yalnızca bir oyuncunun PlayerGui nesnesine ebeveyn olduğunda ekranda görünür. Varsayılan olarak, bu sistem GUI'si, sohbet penceresi gibi şeyleri içerir. Şimdi, ReplicatedStorage içinde, her oyuncunun GUI'sine yükseltme düğmesini kopyalayacak bir script oluşturmanız ve düğmeye basıldığında ne olacağını uygulamanız gerekiyor.

JumpButtonClickHandler Oluştur

ReplicatedStorage içinde, RunContext özelliği Client olarak ayarlanmış JumpButtonClickHandler adında bir Script oluşturun ve 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 success false ise hata mesajı olacaktır
error(purchased)
elseif success and not purchased then
warn("Yeterli jeton yok!")
end
end
jumpButton.Activated:Connect(onButtonClicked)
-- JumpPurchaseGui'yi oyuncunun GUI'sine ekle
jumpPurchaseGui.Parent = playerGui
```

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

  • GUI ve sunucu işlevine başvuruları elde edin - Değişkenler IncreaseJumpPowerFunction, jumpPurchaseGui ve jumpButton, ileride ihtiyaç duyacağınız işlev ve GUI'ye referans içerir.
  • Olay işleyicisini tanımlayın - onButtonClicked() kullanıcılar yükseltme düğmesine tıkladığında ne olacağına dair mantığı tanımlar. pcall() (korumalı çağrı) kullanarak RemoteFunction'ı tetikler. Bu tür istemci-sunucu iletişimlerinin herhangi biri için bağlantı sorunları veya hataları yönetmek üzere pcall() kullanmak gerekir.
  • İşleyiciyi düğmeye bağlayın - Activated olayı, fare, dokunmatik ekran veya oyun kumandası durumları dahil olmak üzere tüm platformlarda uyumludur. Bir tıklama, dokunma veya oyun kumandası düğmesi bırakıldığında tetiklenir.

Oyun Testi

Açılır menüden Test seçin ve Play'e tıklayın. Jump'ı Yükselt düğmesi sağ altta görünecektir.

Hiç jeton toplayamadan önce düğmeye tıklamayı deneyin, böylece bunun size ek zıplama gücü ödüllendirmediğini kontrol edin; ardından bazı jetonlar toplamayı deneyin ve tekrar tıkladığınızda yükseltmenin çalışıp çalışmadığını görebilirsiniz.

Kod tamamlandıktan sonra zorluğu ayarlamayı deneyin: tempoyu yavaş hissediyorsanız jeton ekleyin veya güncellemelerin çok kolay geldiği durumlarda bunları çıkarın ve daha zorlu 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.