Diğer/Puan Verme ile Pratik

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

Bu proje, renkli bir lider tablosunda noktaların herhangi bir renge bağlı olarak vereceği veya çekeceği bir parçayı oluşturmak için kondisyonlara dayalı ifadeleri kullanacaktır. Eğer maviysa, bir oyuncuya birkaç puan verir. Eğer yeşilseniz, bir oyuncuya çok puan verir. Son olarak, eğer kırmızıysanız, bir puanı çek

Projeyi ayarlama

Nokta veren parça herhangi bir nokta alanında eklenebilir. durum, oyuncular nokta toplayan bir macera oyunu.

Nokta Takibi

Bu projeyi kurmak için bir lider tablosuna ihtiyacınız olacak, böylece puanları takip edebilirsiniz ve renkleri değiştiren bir parçaya. Lider tablosu için kod sağlanacaktır.

  1. Leaderboard adındaki ServerScriptService nin yeni bir senaryosunu oluştur. Kodu senaryoya yapıştır.


    --ServerScriptService'de, aşağıdaki içeriklerle PlayerSetup adında bir senaryo oluşturun.
    local Players = game:GetService("Players")
    local function onPlayerJoin(player)
    local leaderstats = Instance.new("Folder")
    leaderstats.Name = "leaderstats"
    leaderstats.Parent = player
    -- IntValue'nin bir örneği
    local points = Instance.new("IntValue")
    points.Name = "Points"
    points.Value = 0
    points.Parent = leaderstats
    end
    -- Oyuncu eklediğinde çalıştır onPlayerJoin
    Players.PlayerAdded:Connect(onPlayerJoin)

Renk Değiştiren Parça

Kısmın için üç farklı renk aracında yolculuk eder. Her renk bir RGB değerini depolamak için bir değişken olacak, renkleri oluşturan üç sayıyı (kırmızı, yeşil, mavi) içeren bir veri türü.

  1. PointScript adlı bağlı bir skriptle PointPart adında bir parça oluşturun.

  2. In PointScript, use script.Parent to refer to the part.


    local pointPart = script.Parent
  3. Farklı renkleri depolamak için değişkenler oluşturun. Her değişkenin Color3.fromRGB() olması gerekir, bu bir renk değerini oluşturur.

    • Mavi (Bazı Noktalar): (0, 0, 255)
    • Yeşil (Puanlar: 0, 255, 0)
    • Kırmızı (Puanı Kaybet): (255, 0, 0)

    local pointPart = script.Parent
    -- Renkler
    local blue = Color3.fromRGB(0, 0, 255)
    local green = Color3.fromRGB(0, 255, 0)
    local red = Color3.fromRGB(255, 0, 0)
  4. Noktalar için küçük bir sayı için, daha büyük bir sayı için ve noktaları kaldırmak için üçüncüsü ekleyin.


    -- Renkler
    local blue = Color3.fromRGB(0, 0, 255)
    local green = Color3.fromRGB(0, 255, 0)
    local red = Color3.fromRGB(255, 0, 0)
    -- Nokta değerleri
    local smallPoints = 10
    local largePoints = 50
    local losePoints = 100

Oyuncular Hizmeti Ekleme

Puanları ödüllendirmek için, Oyuncular altındaki Explorer'daki oyuncu bilgisine erişmeniz gerekir, bu da karakter objesinden ayrıdır. Burada lider tablosu istatistikleri gibi bilgiler bulunabilir.

Bunu yapmak için senin script'ine Oyuncular hizmetini eklemek. Hizmetler Roblox mühendisleri tarafından zamanında kaydetmek için yapılmış ekstra önceden inşa edilmiş işlevlerdir.

  1. Yazmak için Oyuncular hizmetini alın:

    local Players = game:GetService("Players")


    -- Nokta değerleri
    local smallPoints = 10
    local largePoints = 50
    local losePoints = 100
    -- Gereken hizmetler
    local Players = game:GetService("Players")

Fonksiyonlar ve Etkinlikler

PointsScript iki işlev gerekecektir. İlk işlev parçaları ekleyecek ve çıkaracaktır. İkinci işlev ise bir oyuncunun parçaya dokunduğunu kontrol edecektir. Bu işlevler bir dokunma etkinliğiyle bağlantı kuracaktır, bu da parçaya dokunulduğunda her zaman çalışır.

  1. Test için kullanılacak bir yeni işlev oluşturun ve "givePoints() "adında bir参etre ekleyin.


    local Players = game:GetService("Players")
    -- Noktaları ekler veya çıkarır
    local function givePoints(player)
    print("Giving player points")
    end
  2. Aşağıda, partTouched() adında ikinci bir işlev oluştur, otherPart adında bir parametreyle.


    -- Noktaları ekler veya çıkarır
    local function givePoints(player)
    print("Giving player points")
    end
    -- Oyuncunun parçaya dokunduğunu kontrol eder
    local function partTouched(otherPart)
    end
  3. İşlevin içinde, diğer birParça değişkeninde bir oyuncu olup olmadığını kontrol etmek için işlevi GetPlayerFromCharacter() kullanın.


    -- Oyuncunun parçaya dokunduğunu kontrol eder
    local function partTouched(otherPart)
    local player = Players:GetPlayerFromCharacter(otherPart.Parent)
    end
  4. Bir oyuncu parçaya dokunursa, o oyuncu değişkenine saklanacaktır. Aksi takdirde, değişken boş kalacaktır. sahip ol:

    • İşlev içinde, oyuncunun bir değeri var mı kontrol edin. Eğer varsa, givePoints(player) çağırın.
    • İşlevin altında, partTouched() 'i pointPart 'in Dokunulan etkinliğine bağlayın.

    -- Oyuncunun parçaya dokunduğunu kontrol eder
    local function partTouched(otherPart)
    -- Parçaya birisi dokunursa oyuncuyu alır
    local player = Players:GetPlayerFromCharacter(otherPart.Parent)
    if player then
    givePoints(player)
    end
    end
    pointPart.Touched:Connect(partTouched)
  5. Projeyi çalıştır projesini. Herhangi bir oyuncu parçaya dokunduğunda, çıktı Penceresinde bir mesaj görmelisiniz, mavi alan: "Giving player points" Hata ayıklama ipuçları::

  • Players içindeki game:GetService("Players")Players'ı kontrol edin.
  • partTouched()``Touched etkinliğine bağlanmalıdır.

Kayış Rengini Oluştur

Renkler arasında döndüğünde, özellik renklerini her birkaç saniyede bir değiştiren bir y = döngü kullanacaktır. Bu döngü için koşul doğrudur, böylece onu sonsuza kadar çalıştırabilirsiniz.

  1. Yazının sonunda, koşulun doğru olduğu bir yeni while çözüm oluşturur, yani sürekli olarak çalışır.


    -- Oyuncunun parçaya dokunduğunu kontrol eder
    local function partTouched(otherPart)
    -- Parçaya birisi dokunursa oyuncuyu alır
    local player = Players:GetPlayerFromCharacter(otherPart.Parent)
    if player then
    givePoints(player)
    end
    end
    pointPart.Touched:Connect(partTouched)
    -- Renkler aracılığıyla döngü
    while true do
    end
  2. Kendiniz, code a while true do loop that changes pointPart to the color variables you've created. Don't forget to use task.wait() between colors. When finished, check your code against the version below.


    -- 3 renk arasında döngüler, her renk arasında bekleyin
    while true do
    pointPart.Color = blue
    task.wait(3)
    pointPart.Color = green
    task.wait(2)
    pointPart.Color = red
    task.wait(1)
    end
  3. Tüm üç renklerin döngüsünü durmadan test edin ve kontrol edin.

Hata ayıklama ipuçları

Bu noktada, renk döngüsü istediğiniz gibi çalışmazsa, aşağıdaki birinden deneyin.

  • while için bu işlem işlemi için ekran altındaki Toplama etkinliğinin altında olup olmadığını kontrol edin. Eğer işlem işlemi 2> ekran2> altında değilse, diğer parçaların 5>doğru5> şekilde çalışmasını sağlayacaktır.
  • Her renk Color3.fromRGB() içinde doğru yazıldığından emin olun. Komutlar arasında 0 ve 255 arasında üç sayı olmalıdır, bunun gibi (255, 50, 0) .

Oyunculara Puan Verme

Oyuncular parçaya dokunduğunda mevcut parçanın rengine göre puan verecek.

Mevcut Rengi Bulma

Bir oyuncu bir parçaya dokunduğunda, daha sonra puanları ödüllendirmek için parçanın mevcut rengini bilmesi gerekir.

  1. Find givePoints() . Test mesajınızı noktaPart'ın mevcut rengi için bir değişkenle değiştirin. Bu değişken, oyuncunun ne kadar puan alacağını (veya kaybedeceği) belirleyecektir.


    local function givePoints(player)
    local currentColor = pointPart.Color
    end
  2. Bir oyuncunun puanlarını etkilemek için, bu işlevin liderlik tablosuerişmesi gerekir. Bir değişken oluşturarak saklayın.


    local function givePoints(player)
    local currentColor = pointPart.Color
    local playerStats = player:WaitForChild("leaderstats")
    end
  3. Şimdi oyuncunun Puan değerini almak için bir değişken ekleyin, bu onların liderlik tablosubir çocuğu.


    local function givePoints(player)
    local currentColor = pointPart.Color
    local playerStats = player:WaitForChild("leaderstats")
    local playerPoints = playerStats:WaitForChild("Points")
    end

Noktaları Verme veya İndirme

Sonra, eğer veya eğilirse puanları vermek veya çıkarmak için renk kısmına bağlı olarak puanları vermek veya çıkarmak için kullanırız. Unutmayın ki, mavi biraz verir, yeşil çok verir ve kırmızı biraz çıkar.

  1. givePoints() içinde, değişkenlerin altında, bir ifadeyi kullanarak mevcut rengin mavi olduğunu ve eğer öyleyse smallPoints oyuncunun mevcut puan değerine ekleyin.


    local function givePoints(player)
    local currentColor = pointPart.Color
    local playerStats = player:WaitForChild("leaderstats")
    local playerPoints = playerStats:WaitForChild("Points")
    if currentColor == blue then
    playerPoints.Value += smallPoints
    end
    end
  2. Yeşil olup olmadığınızı kontrol etmek için bir else eklemeniz gerekir. Eğer yeşil ise, oyuncunun puanlarına largePoints değerini ekleyin.


    if currentColor == blue then
    playerPoints.Value += smallPoints
    elseif currentColor == green then
    playerPoints.Value += largePoints
    end
  3. Blue veya green olmayan noktaPart'ın noktalarını çıkarmak için başka bir ifadeyi kullanın.


    if currentColor == blue then
    playerPoints.Value += smallPoints
    elseif currentColor == green then
    playerPoints.Value += largePoints
    else
    playerPoints.Value -= losePoints
    end
  4. Son olarak, destroy parçasını ifadenin ardından yok et, böylece senaryo nokta vermeyi sürdüremez.


    if currentColor == blue then
    playerPoints.Value += smallPoints
    elseif currentColor == green then
    playerPoints.Value += largePoints
    else
    playerPoints.Value -= losePoints
    end
    pointPart:Destroy()
  5. Renklerin her biri olması gerektiği gibi puan verdiğinden emin olun. Tüm üç koşullarını test edin.

Oyunculara Geri Bildirim Ver

PointPart çalışıyor, ancak oyuncular liderlik tablosubakmadıklarından bir şey olup olmadığını fark etmeyebilir. Bunu修复하려면, PointPart yok edildiğinde parçacıklar oluşturarak.

Oyuncular bir parçayı kullanırken, sesler, sarsıntılar veya parçacıklar gibi geri bildirimler eklemek, etkileşimleri oyunculara daha memnuniyetli hale getirir.

Bir Particle Efekti Oluşturulması

Parçaya dokunulduğunda aynı renk olacaktır. Renkler değişkenlere saklandığından, onları kolayca tekrar kullanmak mümkündür.

  1. Aşağıda givePoints() ile, yeni bir ParticleEmitter durumoluşturun. Parça isminin doğru yazıldığından emin olun.


    local particle = Instance.new("ParticleEmitter")
    end
  2. ParticleEmitterler renk özelliklerini kontrol etmek için renk serilerini kullanır. Yeni bir RenkSerü oluşturun ve mevcut bir parça rengini geçin.


    -- Parçayı yok et
    pointPart:Destroy()
    -- Parçacılar oluştur
    local particle = Instance.new("ParticleEmitter")
    particle.Color = ColorSequence.new(currentColor)
  3. Parçacık dokunan oyuncuya bağlanacak. Bir oyuncu için Karakter modelini almak için bir değişken oluştur. Sonra, parçacığı oyuncunun kafasına bağla.


    local particle = Instance.new("ParticleEmitter")
    particle.Color = ColorSequence.new(currentColor)
    local playerCharacter = player.Character
    particle.Parent = playerCharacter:WaitForChild("Head")
  4. Hızlı bir saniye için task.wait() kullanın, sonra parçaları yok edin.


    local particle = Instance.new("ParticleEmitter")
    particle.Color = ColorSequence.new(currentColor)
    local playerCharacter = player.Character
    particle.Parent = playerCharacter:WaitForChild("Head")
    task.wait(1)
    particle:Destroy()
  5. Oyunu oynayın ve parçacıkların her rengi dokununca kısa süreli olarak oyuncuyu takip ettiğinden emin olun.

Hata ayıklama ipuçları

Bu noktada, parçacıklar istediğiniz gibi çalışmazsa, aşağıdaki birini deneyin.

  • ParticleEmitter'ın yeni bir istemci oluştururken aynen olduğu gibi gösterildiği ve içinde alıntılar içinde gösterildiği gibi yapılır.
  • Parçalara ebeveyn olurken, :``playerCharacter ile WaitForChild() arasında boşluk olmadan 2>12> kullanın.

PointScript'i Tamamla

Skriptin bitirilmiş bir versiyonu aşağıda referanslanabilir.


local pointPart = script.Parent
--yerel depolama = oyun:GetService("ServerStorage")
-- Bazı puanlar verir
local blue = Color3.fromRGB(0, 0, 255)
-- Daha fazla puan verir
local green = Color3.fromRGB(0, 255, 0)
-- Oyuncuların puanlarını kaybetmesine neden olur
local red = Color3.fromRGB(255, 0, 0)
-- oyunculara verilen altın
local smallPoints = 10
local largePoints = 50
local losePoints = 100
local Players = game:GetService("Players")
local function givePoints(player)
local currentColor = pointPart.Color
local playerStats = player:WaitForChild("leaderstats")
local playerPoints = playerStats:WaitForChild("Points")
-- Parçanın rengine göre oyuncuya altın verir
if currentColor == blue then
playerPoints.Value += smallPoints
elseif currentColor == green then
playerPoints.Value += largePoints
else
playerPoints.Value -= losePoints
end
-- Parçayı yok et, bir saniye bekle ve sonra parçayı yok et
pointPart:Destroy()
-- Bir parlaklık efekti oluşturur ve onu yok eder
local playerCharacter = player.Character
local particle = Instance.new("ParticleEmitter")
particle.Color = ColorSequence.new(currentColor)
particle.Parent = playerCharacter:WaitForChild("Head")
task.wait(1)
particle:Destroy()
end
local function partTouched(otherPart)
local player = Players:GetPlayerFromCharacter(otherPart.Parent)
if player then
givePoints(player)
end
end
pointPart.Touched:Connect(partTouched)
-- Değişkenlerin parçanın rengini değiştirir. Skriptin altında olması gerekir.
while true do
pointPart.Color = blue
task.wait(4)
pointPart.Color = green
task.wait(3)
pointPart.Color = red
task.wait(2)
end