Oyuncular artık para toplayabilir ve öldüklerinde kaybedebilirler, ancak paralar hiçbir şey yapmaz ve oyun dünyasının çoğu çok yükseğe atlama yeteneği olmadan erişilemez.Bu eğitimin bu bölümü, atlama gücünü artırmak için para harcayan bir ekran düğmesi ekleyerek deneyimin mantığını bitirmenizi öğretir.
Yükseltme düğmesini oluştur
Roblox'taki 2B arayüzleri genellikle bir GUI konteynerinin içinde bir dizi GUI bileşeninden oluşur.Bu durumda, sadece bir TextButton bileşeni ihtiyacınız var, Yükseltme Zıplaması (5 Paralar) içinde bir ScreenGui konteyner içinde söylüyor.
GUI'yi oluşturmak için:
- Araştırıcı penceresinde, Yeniden Yansıtılan Depolama 'ya yeni bir klasör ekleyin, ardından klasörü Instances olarak yeniden adlandırın. Yeniden Düzenlenmiş Depolama içindeki herhangi bir nesne, GUI'lerin gösterildiği yere erişebilir, bu da oyuncunun Roblox istemcisidir.
- Ekran Güvenliği nesnesini Instanslar klasörüne ekleyin.
- Ekran Gui nesnesini seçin, ardından Özellikler penceresinde,
- İsmi JumpPurchaseGui 'ye ayarlayın.
- Kullanıcı yeniden doğduğunda GUI'nin oyuncuya bağlı kalmasını sağlamak için ResetOnSpawn özelliğini devre dışı bırakın.
- Araştırıcı penceresinde, JumpPurchaseGui konteynerine bir TextButton ekleyin, ardından metin düğmesini JumpButton olarak yeniden adlandırın.
- (Opsiyonel) Düğmenin görünümünü ve konumunu özelleştirmek için özelliklerini yapılandırarak düğmenin görünümünü ve konumunu basitleştirin. Basit öneriler şunları içerir:
- Metin özelliğini Yükseltme Zıplaması (5 Para) olarak ayarlayın.
- Metin Boyutu özelliğini 25 olarak ayarlayın.
- Butonu sağ alt köşeye hareket ettirmek için AnchorPoint ve Konum ayarlanır ve düğme hareket ettirilir.
Butonu daha sonra bu eğitimde oyuncunun GUI'sine ekleyeceksiniz, ancak bunu yapmadan önce, butonun çalışması için gerekli olan tüm mantığı ve verileri tanımlamanız gerekiyor.
Zıplama gücü verilerini tanımla
Şu anda, yalnızca para sayısı her oyuncu için OyuncuVerileri modül kriptinde saklanmaktadır.Aynı şekilde atlama gücünü de depolayıp güncellemeniz gerekir.Çünkü OyuncuVeri 'deki işlevler değiştirilen verilere özel olmadığından, oyuncunun atlama gücünü depolamak için gereken tek şey bir Jump anahtar eklemek ve başlangıç değerini DEFAULT_PLAYER_DATA 'de başlatmaktır.
Zıplama gücünü depolamak için OyuncuVerileri modül kodunu güncelleştirmek:
Gezgin penceresinde, OyuncuVerileri modül kodunu SunucuDepolama 'da açın.
Kodu senaryoda mevcut Jump değerlerinin yanında her oyuncu için bir Coins değeri başlatan aşağıdaki örnekle değiştirin:
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
Zıplama gücü verilerini güncelle
Artık OyuncuVerileri atlama gücünü izleyebiliyor, bir oyuncunun istemcisinden atlama gücünü yükseltmek için sunucuda mantığı uygulamanız gerekiyor.
Sunucu ve istemci, uzaktan olaylar veya uzaktan işlevler aracılığıyla iletişim kurabilir.Uzak olaylar ateşlendiğinde vermez ve tek yönlü iletişim için uygundur.Uzak işlevler, iki yönlü iletişim sağlayan bir yanıt alana kadar üretilir.Bu durumda, müşterinin sunucunun oyuncunun atlama gücünü başarıyla yükselttiğini bilmesi gerekiyor, bu yüzden uzaktan işlev ideal.
Zıplama yükseltmesini uygulamak için:
Araştırıcı penceresinde, Yeniden Yansıtılan Depolama 'da İstisnalar klasörünü açın.
Bir Uzak Fonksiyon ı Instanslar klasörüne ekleyin, ardından uzak işlevin adını Zıplama Gücü Artırma Fonksiyonu olarak değiştirin.Asla yerel işlevleri ReplicatedStorage 'da oluşturursunuz, çünkü hem istemci hem de sunucu onlara erişebilmelidir.
Gezgin penceresinde, Başlangıç Oyuncusu seçin.
Özellikler penceresinde, KarakterKullanımGücü özelliğini etkinleştirin.Varsayılan olarak, bir karakterin atlama gücü değeri bir karakterin atladığı miktarı tanımlamaz, bu yüzden bunun etkinleştirilmesi gerekir.
Araştırıcı penceresinde, yeni bir kodu Sunucu Kript Hizmetine ekleyin, ardından kodu Zıplama Hizmetine yeniden adlandırın.Bu senaryo, atlama yükseltmeleri için mantığı içerecektir.
Varsayılan kodu aşağıdaki kodla değiştirin:
-- Hizmetlerlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local ServerStorage = game:GetService("ServerStorage")local Players = game:GetService("Players")-- Modüllerlocal Leaderboard = require(ServerStorage.Leaderboard)local PlayerData = require(ServerStorage.PlayerData)-- Etkinliklerlocal 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)-- Zıplama gücü tablosunu güncellelocal newJumpPower = PlayerData.updateValue(player, JUMP_KEY_NAME, updateFunction)-- Oyuncuların atlama gücünü güncellelocal character = player.Character or player.CharacterAdded:Wait()local humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenhumanoid.JumpPower = newJumpPower-- Zıplama lider liderlik tablosugüncelleLeaderboard.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-- oyuncuatlama gücünü artırupdateJumpPower(player, function(oldJumpPower)oldJumpPower = oldJumpPower or 0return oldJumpPower + JUMP_POWER_INCREMENTend)-- Para tablosunu güncellelocal newCoinAmount = PlayerData.updateValue(player, COIN_KEY_NAME, function(oldCoinAmount)return oldCoinAmount - JUMP_COIN_COSTend)-- Para lider liderlik tablosugüncelleLeaderboard.setStat(player, COIN_KEY_NAME, newCoinAmount)return trueendlocal function onCharacterAdded(player)-- Karakter eklenirken oyuncunun atlama gücünü sıfırlaupdateJumpPower(player, function(_)return 0end)end-- Oyuncu bağlanmadan önce eklenen herhangi bir oyuncuyu başlatın PlayerAdded etkinliğinefor _, player in Players:GetPlayers() doonCharacterAdded(player)end-- PlayerAdded etkinliğinden oyuncuların normal başlatılmasılocal 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)Kod açıklamasıAşağıdaki bölümler kodu daha ayrıntılı olarak tanımlar.
Zıplama gücü verilerini güncelleştirin - updateJumpPower() oyuncunun ve lider tablosunun zıplama gücünü görsel geri dönüşbildirim sağlamak için günceller.Bu işlev, oyunculara zarar veren kodu andırıyor Oyuncu tehlikeleri oluştur .Oyuncunun yükseltilmesi için bir Character modeli ve Humanoid oyuncunun geliştirilmesi için var olan bir JumpPower özellik değeri yeni PlayerData tarafından depolanan değere güncellendi, bunu 30 artırarak.Oyununuzun biraz daha uzun sürmesini istiyorsanız, bu sayıyı azaltabilirsiniz.
Sunucu isteklerini doğrula - onPurchaseJumpIncrease() önce oyuncunun yükseltme satın almak için gerekli para sayısına sahip olup olmadığını kontrol eder. Tüm istekler müşterilerden sunucuya, kötü aktörlerin yanlış istek göndermesini ve deneyiminizin kullanılmasını engellemek için doğrulanmalıdır .
Butonu oyuncunun GUI'sine ekleyin
Bir ScreenGui nesnesi yalnızca bir oyuncunun PlayerGui nesnesine ebeveyn olursa ekranda görünür.Varsayılan olarak, bunun içinde sohbet penceresi gibi sistem arayüzü bulunur.Artık yükseltme düğmesini her oyuncunun GUI'sine kopyalamak ve basıldığında davranışı uygulamak için ReplicatedStorage içinde bir senaryo oluşturmanız gerekiyor.
Oyuncunun katıldığında düğmeyi oyuncunun GUI'sine eklemek için:
Araştırıcı penceresinde, Yeniden Yazılan Depolama 'da bir Kod oluşturun.
Komutu seçin, ardından Özellikler penceresinde,
- İsmi Zıplama Düğmesi Tıklama Elemanına ayarlayın.
- YürütmeKonteyneri Müşteri 'ye ayarlayın. Bu, motorun ağ iletişimini optimize etmek için daima bu senaryoyu müşteride çalmasını söyler.
Açık kaydaki, varsayılan kodu aşağıdaki kodla değiştirin:
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-- satın alınan başarısız olduğunda hata mesajı olacaktır if falseerror(purchased)elseif success and not purchased thenwarn("Not enough coins!")endendjumpButton.Activated:Connect(onButtonClicked)-- oyuncuGui'sine JumpPurchaseGui ekleyinjumpPurchaseGui.Parent = playerGuiKod açıklamasıAşağıdaki bölümler kodu daha ayrıntılı olarak tanımlar.
- GUI ve sunucu işlevine referans alın - Değişkenler IncreaseJumpPowerFunction , jumpPurchaseGui ve jumpButton , daha sonra ihtiyacınız olacak işlev ve GUI'ye referans içeriyor.
- Etkinlik işleyicisini tanımlayın - onButtonClicked() kullanıcılar yükseltme düğmesine tıkladığında mantığı tanımlar.Kullanır pcall() (korunan çağrı) RemoteFunction 'yi çağırmak için.Bunun gibi herhangi bir istemci-sunucu iletişimi, hataları veya bağlantı sorunlarını ele almak için pcall() gerektirir.
- İşleyiciyi düğmeye bağlayın - Activated etkinliği, fare, dokunma veya oyun konsolu gibi tüm platformlarda uyumludur.Bir tıklama , dokunma veya oyun kolu düğmesi serbest bırakıldığında tetiklenir.
Oynatma testi
Artık yükseltme düğmesini kullanarak para için atlama yükseltmeleri satın alabilmelisiniz. Projeyi test etmek için:
Araç çubuğunda, Oyna düğmesine tıklayın. Studio oyun testi moduna girer.
Kodlarınız doğru çalışıyorsa, atlama gücü satın almak için bir düğme ekranda görünür.Herhangi bir para toplamadan önce düğmeye tıklamayı deneyin, ardından birkaç para toplayın ve yeniden tıkladığınızda yükseltmenin çalışıp çalışmadığını görün.
Şimdi kod tamamlandı, oyunu para miktarı ve konumları aracılığıyla dengelemeyi deneyin.Oyun çok yavaş hissediyorsa daha fazla para ekleyin veya çok hızlı ve kolay hissediyorsa para çıkarın ve zorlu yerlere koyun.