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.
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ğilocal points = Instance.new("IntValue")points.Name = "Points"points.Value = 0points.Parent = leaderstatsend-- Oyuncu eklediğinde çalıştır onPlayerJoinPlayers.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ü.
PointScript adlı bağlı bir skriptle PointPart adında bir parça oluşturun.
In PointScript, use script.Parent to refer to the part.
local pointPart = script.ParentFarklı 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-- Renklerlocal blue = Color3.fromRGB(0, 0, 255)local green = Color3.fromRGB(0, 255, 0)local red = Color3.fromRGB(255, 0, 0)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.
-- Renklerlocal blue = Color3.fromRGB(0, 0, 255)local green = Color3.fromRGB(0, 255, 0)local red = Color3.fromRGB(255, 0, 0)-- Nokta değerlerilocal smallPoints = 10local largePoints = 50local 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.
Yazmak için Oyuncular hizmetini alın:
local Players = game:GetService("Players")
-- Nokta değerlerilocal smallPoints = 10local largePoints = 50local losePoints = 100-- Gereken hizmetlerlocal 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.
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ırlocal function givePoints(player)print("Giving player points")endAşağıda, partTouched() adında ikinci bir işlev oluştur, otherPart adında bir parametreyle.
-- Noktaları ekler veya çıkarırlocal function givePoints(player)print("Giving player points")end-- Oyuncunun parçaya dokunduğunu kontrol ederlocal function partTouched(otherPart)endİş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 ederlocal function partTouched(otherPart)local player = Players:GetPlayerFromCharacter(otherPart.Parent)endBir 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 ederlocal function partTouched(otherPart)-- Parçaya birisi dokunursa oyuncuyu alırlocal player = Players:GetPlayerFromCharacter(otherPart.Parent)if player thengivePoints(player)endendpointPart.Touched:Connect(partTouched)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.
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 ederlocal function partTouched(otherPart)-- Parçaya birisi dokunursa oyuncuyu alırlocal player = Players:GetPlayerFromCharacter(otherPart.Parent)if player thengivePoints(player)endendpointPart.Touched:Connect(partTouched)-- Renkler aracılığıyla döngüwhile true doendKendiniz, 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 bekleyinwhile true dopointPart.Color = bluetask.wait(3)pointPart.Color = greentask.wait(2)pointPart.Color = redtask.wait(1)endTü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.
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.ColorendBir 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.Colorlocal playerStats = player:WaitForChild("leaderstats")endŞ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.Colorlocal 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.
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.Colorlocal playerStats = player:WaitForChild("leaderstats")local playerPoints = playerStats:WaitForChild("Points")if currentColor == blue thenplayerPoints.Value += smallPointsendendYeş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 thenplayerPoints.Value += smallPointselseif currentColor == green thenplayerPoints.Value += largePointsendBlue veya green olmayan noktaPart'ın noktalarını çıkarmak için başka bir ifadeyi kullanın.
if currentColor == blue thenplayerPoints.Value += smallPointselseif currentColor == green thenplayerPoints.Value += largePointselseplayerPoints.Value -= losePointsendSon olarak, destroy parçasını ifadenin ardından yok et, böylece senaryo nokta vermeyi sürdüremez.
if currentColor == blue thenplayerPoints.Value += smallPointselseif currentColor == green thenplayerPoints.Value += largePointselseplayerPoints.Value -= losePointsendpointPart:Destroy()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.
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")endParticleEmitterler 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 etpointPart:Destroy()-- Parçacılar oluşturlocal particle = Instance.new("ParticleEmitter")particle.Color = ColorSequence.new(currentColor)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.Characterparticle.Parent = playerCharacter:WaitForChild("Head")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.Characterparticle.Parent = playerCharacter:WaitForChild("Head")task.wait(1)particle:Destroy()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