Yükseltme düğmesi yazın

*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 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:

  1. 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.
  2. Ekran Güvenliği nesnesini Instanslar klasörüne ekleyin.
  3. Ekran Gui nesnesini seçin, ardından Özellikler penceresinde,
    1. İsmi JumpPurchaseGui 'ye ayarlayın.
    2. 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.
  4. Araştırıcı penceresinde, JumpPurchaseGui konteynerine bir TextButton ekleyin, ardından metin düğmesini JumpButton olarak yeniden adlandırın.
  5. (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:

  1. Gezgin penceresinde, OyuncuVerileri modül kodunu SunucuDepolama 'da açın.

  2. 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_DATA
    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ü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:

  1. Araştırıcı penceresinde, Yeniden Yansıtılan Depolama 'da İstisnalar klasörünü açın.

  2. 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.

    Studio's Explorer window with the IncreaseJumpPowerFunction script highlighted under the Instances folder.
  3. Gezgin penceresinde, Başlangıç Oyuncusu seçin.

  4. Ö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.

  5. 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.

  6. Varsayılan kodu aşağıdaki kodla değiştirin:


    -- Hizmetler
    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)
    -- Oyuncuların atlama 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 liderlik tablosugü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
    -- oyuncuatlama gücünü artır
    updateJumpPower(player, function(oldJumpPower)
    oldJumpPower = oldJumpPower or 0
    return oldJumpPower + JUMP_POWER_INCREMENT
    end)
    -- Para tablosunu güncelle
    local newCoinAmount = PlayerData.updateValue(player, COIN_KEY_NAME, function(oldCoinAmount)
    return oldCoinAmount - JUMP_COIN_COST
    end)
    -- Para lider liderlik tablosugüncelle
    Leaderboard.setStat(player, COIN_KEY_NAME, newCoinAmount)
    return true
    end
    local function onCharacterAdded(player)
    -- Karakter eklenirken oyuncunun atlama gücünü sıfırla
    updateJumpPower(player, function(_)
    return 0
    end)
    end
    -- Oyuncu bağlanmadan önce eklenen herhangi bir oyuncuyu başlatın PlayerAdded etkinliğine
    for _, player in Players:GetPlayers() do
    onCharacterAdded(player)
    end
    -- PlayerAdded etkinliğinden oyuncuların normal başlatılması
    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 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:

  1. Araştırıcı penceresinde, Yeniden Yazılan Depolama 'da bir Kod oluşturun.

  2. Komutu seçin, ardından Özellikler penceresinde,

    1. İsmi Zıplama Düğmesi Tıklama Elemanına ayarlayın.
    2. 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.
  3. 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.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
    -- satın alınan başarısız olduğunda hata mesajı olacaktır if false
    error(purchased)
    elseif success and not purchased then
    warn("Not enough coins!")
    end
    end
    jumpButton.Activated:Connect(onButtonClicked)
    -- oyuncuGui'sine JumpPurchaseGui ekleyin
    jumpPurchaseGui.Parent = playerGui

    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:

  1. Araç çubuğunda, Oyna düğmesine tıklayın. Studio oyun testi moduna girer.

    Play button highlighted in Studio's playtesting options.
  2. 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.