Noktalara puan verme ile Else/if uygulaması

*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, dokunulduğunda parça renginin ne olduğuna göre lider tahtasındaki puanları artıran veya azaltan bir parça oluşturmak için koşullu ifadeleri kullanacaktır. Mavi olduğunda, oyunculara birkaç puan verecektir. Yeşil olduğunda, çok sayıda puan verecektir. Son olarak, kırmızı olduğunda, puan alacaktır.

Projeyi ayarlama

Puan veren parça, puanların ilgili olduğu herhangi bir projeye eklenebilir. Örneğin, oyuncuların puan topladığı bir macera oyunu.

Puan izleme

Bu projeyi ayarlamak için, puanları takip etmek için bir lider tahtasına ve renk değiştiren bir parçaya ihtiyacınız olacak. Lider tahtası için gereken kod sağlanacaktır.

  1. ServerScriptService altında Leaderboard adında yeni bir script oluşturun. Aşağıdaki kodu script'e kopyalayıp yapıştırın.


    --ServerScriptService içinde, aşağıdaki içeriğe sahip PlayerSetup adında bir script oluşturun.
    local Players = game:GetService("Players")
    local function onPlayerJoin(player)
    local leaderstats = Instance.new("Folder")
    leaderstats.Name = "leaderstats"
    leaderstats.Parent = player
    -- Bir IntValue örneği
    local points = Instance.new("IntValue")
    points.Name = "Points"
    points.Value = 0
    points.Parent = leaderstats
    end
    -- PlayerAdded olayı tetiklendiğinde onPlayerJoin'u çalıştır
    Players.PlayerAdded:Connect(onPlayerJoin)

Renk değiştiren parça

Script, parçanın üç farklı renginden dönecektir. Her bir rengin RGB değerini depolamak için bir değişkeni olacak, bu renk değerleri renkleri oluşturan üç sayıdan (kırmızı, yeşil, mavi) oluşan bir veri türüdür.

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

  2. PointScript içerisinde script.Parent kullanarak parçaya referans verin.


    local pointPart = script.Parent
  3. Farklı renkleri depolamak için değişkenler oluşturun. Her bir değişken Color3.fromRGB() ile ayarlanmalı, bu da bir renk değeri oluşturmaktadır.

    • Mavi (Biraz Puan): (0, 0, 255)
    • Yeşil (Çok Puan): (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. Küçük bir puan tutarını, daha büyük bir puan tutarını ve puan kaybetmek için üçüncü bir değişken ekleyin.


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

Oyuncular servisini ekleme

Puan vermek için, Explorer'da Oyuncular altında saklı olan oyuncu bilgilerine erişmeniz gerekecek ve bu, karakter nesnesinden ayrı. Bilgilerin, lider tahtası gibi bilgiler burada bulunacaktır.

Script'inize Players servisinin eklenmesiyle bunu yapabilirsiniz. Servisler, Roblox mühendisleri tarafından zamanınızı kurtarmak için oluşturulmuş ek, önceden tanımlı fonksiyon setleridir.

  1. Players servisini almak için şunu yazın:

    local Players = game:GetService("Players")


    -- Puan değerleri
    local smallPoints = 10
    local largePoints = 50
    local losePoints = 100
    -- Gerekli servisler
    local Players = game:GetService("Players")

Fonksiyonlar ve olaylar

PointsScript, iki fonksiyona ihtiyaç duyacaktır. İlk fonksiyon puanları verecek ve kaldıracaktır. İkinci fonksiyon ise bir oyuncunun parçaya dokunup dokunmadığını kontrol edecektir. Bu fonksiyonlar, bu parçaya dokunulduğunda tetiklenecek bir dokunma olayı ile bağlanacaktır.

  1. givePoints() adında yeni bir fonksiyon oluşturun ve bir parametre olan player ekleyin. İçerisine test için kullanılacak bir print ifadesi ekleyin.


    local Players = game:GetService("Players")
    -- Puan verir veya puan azaltır
    local function givePoints(player)
    print("Oyuncuya puan veriliyor")
    end
  2. Bunun altına, otherPart adında bir parametreye sahip partTouched() adında ikinci bir fonksiyon oluşturun.


    -- Puan verir veya puan azaltır
    local function givePoints(player)
    print("Oyuncuya puan veriliyor")
    end
    -- Oyuncunun parçaya dokunup dokunmadığını kontrol eder
    local function partTouched(otherPart)
    end
  3. Fonksiyonun içerisinde, GetPlayerFromCharacter() fonksiyonunu kullanarak otherPart değişkeninde bir oyuncunun olup olmadığını kontrol edin.


    -- Oyuncunun parçaya dokunup dokunmadığını kontrol eder
    local function partTouched(otherPart)
    local player = Players:GetPlayerFromCharacter(otherPart.Parent)
    end
  4. Eğer bir oyuncu parçaya dokunduysa, oyuncu değişkeninde saklanacaktır. Eğer dokunmadıysa, değişken boş kalacaktır. Kendi başınıza:

    • Fonksiyonun içerisinde, oyuncunun bir değere sahip olup olmadığını kontrol edin. Eğer varsa, givePoints(player) fonksiyonunu çağırın.
    • Fonksiyonun altına, partTouched() fonksiyonunu pointPart'ın Touched olayına bağlayın.

    -- Oyuncunun parçaya dokunup dokunmadığını kontrol eder
    local function partTouched(otherPart)
    -- Parçaya dokunan 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ın. Bir oyuncu parçaya dokunduğunda, Çıktı penceresinde "Oyuncuya puan veriliyor" mesajını görmelisiniz.

Hata Ayıklama İpuçları:

  • game:GetService("Players") içindeki "Players"'ın büyük harflerle yazıldığından ve tırnak içerisinde olduğundan emin olun.
  • partTouched() fonksiyonu, pointPart'ın Touched olayına bağlanmış olmalıdır.

Renk Döngüsü Oluşturma

Renkler arasında döngü yapmak için script, parçanın rengini her birkaç saniyede bir değiştiren bir while döngüsü kullanacaktır. Bu döngünün koşulu true olacağı için, sürekli çalışabilir.

  1. Script'in sonuna, koşulu true olan yeni bir while döngüsü oluşturun, bu da döngünün her zaman çalıştığı anlamına gelir.


    -- Oyuncunun parçaya dokunup dokunmadığını kontrol eder
    local function partTouched(otherPart)
    -- Parçaya dokunan oyuncuyu alır
    local player = Players:GetPlayerFromCharacter(otherPart.Parent)
    if player then
    givePoints(player)
    end
    end
    pointPart.Touched:Connect(partTouched)
    -- Renkler arasında döner
    while true do
    end
  2. Kendinize, pointPart'ı oluşturduğunuz renk değişkenlerine değiştiren bir while true do döngüsü kodlayın. Renkler arasında task.wait() kullanmayı unutmayın. Bitirdikten sonra, kodunuzu aşağıdaki versiyonla karşılaştırın.


    -- 3 renk arasında döner, her renk arasında bekler
    while true do
    pointPart.Color = blue
    task.wait(3)
    pointPart.Color = green
    task.wait(2)
    pointPart.Color = red
    task.wait(1)
    end
  3. Oyunu test edin ve tüm üç rengin durmaksızın döndüğünden emin olun.

Hata Ayıklama İpuçları

Bu noktada, renk döngüsü beklendiği gibi çalışmıyorsa, aşağıdakilerden birini deneyin.

  • While döngüsünün script'in en altına yerleştirildiğini kontrol edin, Touched olayının altına. Eğer döngü altta değilse, script'in diğer kısımlarının doğru çalışmasını engelleyecektir.
  • Her bir rengin Color3.fromRGB() içerisindeki doğru yazıldığını kontrol edin. 0 ile 255 arasında, virgül ile ayrılmış üç sayı olmalıdır, örneğin (255, 50, 0) gibi.

Oyunculara puan verme

Oyunculara, dokunduklarında parçanın o anki rengine göre puan verilecektir.

Geçerli rengi bulma

Her zaman bir oyuncu parçaya dokunduğunda, script'in ileride puan vermesi için parçanın geçerli rengini bilmesi gerekecek.

  1. givePoints() fonksiyonunu bulun. Test mesajınızı pointPart'ın geçerli rengi için bir değişken ile değiştireceksiniz. Bu değişken, oyuncunun ne kadar puan alacağını (veya kaybedeceğini) belirleyecektir.


    local function givePoints(player)
    local currentColor = pointPart.Color
    end
  2. Bir oyuncunun puanlarını etkilemek için, o fonksiyonun oyuncunun lider tahtasına erişimi olması gerekir. Bunun için onu depolamak için bir değişken oluşturun.


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


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

Puan verme veya puan kaybettirme

Sonraki adımda, dokunulduğunda parçanın rengine bağlı olarak puan vermek veya puan almak için if ve elseif kullanacaksınız. Unutmayın ki mavi az miktarda, yeşil çok, kırmızı ise puan azalmasına neden olur.

  1. givePoints() içinde, değişkenlerin altında, geçerli rengin mavi olup olmadığını kontrol etmek için bir if ifadesi kullanın ve eğer öyleyse, smallPoints değerini 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 rengini kontrol etmek için bir else if koşulu ekleyin. Eğer yeşil ise, o zaman oyuncunun puanına largePoints değişkenini ekleyin.


    if currentColor == blue then
    playerPoints.Value += smallPoints
    elseif currentColor == green then
    playerPoints.Value += largePoints
    end
  3. Eğer pointsPart ne mavi ne de yeşil ise puanları azaltmak için bir else ifadesi kullanın.


    if currentColor == blue then
    playerPoints.Value += smallPoints
    elseif currentColor == green then
    playerPoints.Value += largePoints
    else
    playerPoints.Value -= losePoints
    end
  4. Son olarak, if ifadesinin altında parçayı yok edin ki script sürekli olarak puan vermesin.


    if currentColor == blue then
    playerPoints.Value += smallPoints
    elseif currentColor == green then
    playerPoints.Value += largePoints
    else
    playerPoints.Value -= losePoints
    end
    pointPart:Destroy()
  5. Oyunu test edin ve her bir rengin beklendiği gibi puan verip vermediğini kontrol edin. Tüm üç durumu test etmeyi unutmayın.

Oyunculara geri bildirim verme

PointPart çalışıyor, ancak oyuncular bir şeyin olup olmadığını ancak lider tahtalarına bakıldığında fark edebilirler. Bu durumu, PointPart yok edildiğinde partiküller yaratarak düzeltin.

Bir parçayla etkileşimlerde, sesler, sarsıntılar veya parçacıklar eklemek, oyuncular için nesnelerle etkileşimi daha tatmin edici kılar.

Bir parçacık etkisi oluşturma

Parçacık etkisi, dokunulduğunda parçanın rengiyle aynı olacaktır. Renkler değişkenlerde saklandığı için, bunları yeniden kullanmak kolaydır.

  1. givePoints() içerisinde, en altta yeni bir ParticleEmitter örneği oluşturun. Örneğin adının tam yazımına dikkat edin.


    local particle = Instance.new("ParticleEmitter")
    end
  2. ParticleEmitter'lar, Color özelliğini kontrol etmek için renk dizileri kullanır. Yeni bir ColorSequence oluşturun ve mevcut parça rengini geçirin.


    -- Parçayı yok et
    pointPart:Destroy()
    -- Parçacıkları oluştur
    local particle = Instance.new("ParticleEmitter")
    particle.Color = ColorSequence.new(currentColor)
  3. Parçacığın, dokunan oyuncunun karakterine ait olması gerekir. Oyuncunun Karakter modelini almak için bir değişken oluşturun. Ardından, parçacığı oyuncunun başına iliştirin.


    local particle = Instance.new("ParticleEmitter")
    particle.Color = ColorSequence.new(currentColor)
    local playerCharacter = player.Character
    particle.Parent = playerCharacter:WaitForChild("Head")
  4. Bir saniye beklemek için task.wait() kullanın, ardından parçacıkları 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 test edin ve her rengin dokunulduğunda tüm parçacıkların oyuncunun arkasından kısa bir süre peşinden gitmesini sağlayın.

Hata ayıklama ipuçları

Bu noktada, partiküller beklenildiği gibi çalışmıyorsa, aşağıdakilerden birini deneyin.

  • Yeni bir örnek oluşturduğunuzda, ParticleEmitter'in tam olarak gösterildiği gibi yazıldığından ve tırnak işareti içinde olduğundan emin olun.
  • Parçacıkları iliştirirken, playerCharacter ile WaitForChild() arasında : kullandığınızdan ve arada boşluk olmadığından emin olun.

Tam PointScript

Tamamen bitmiş bir script sürümüne aşağıdan erişebilirsiniz.


local pointPart = script.Parent
--local storage = game:GetService("ServerStorage")
-- Birkaç puan verir
local blue = Color3.fromRGB(0, 0, 255)
-- Daha fazla puan verir
local green = Color3.fromRGB(0, 255, 0)
-- Oyuncuların puan kaybetmesine neden olur
local red = Color3.fromRGB(255, 0, 0)
-- Oyunculara verilen puan
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 puan 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çacığı yok et
pointPart:Destroy()
-- Bir ışıltı efekti oluşturur ve 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şkenlere bağlı olarak parçanın rengini değiştirir. Script'in en altında olmalıdır.
while true do
pointPart.Color = blue
task.wait(4)
pointPart.Color = green
task.wait(3)
pointPart.Color = red
task.wait(2)
end
©2026 Roblox Corporation. Roblox, the Roblox logo and Powering Imagination are among our registered and unregistered trademarks in the U.S. and other countries.