這個項目會使用條件性聲明來創建一個會在排行榜上提供或減去點數的零件。如果藍色,則會提供給玩家一些點數。如果綠色,則會提供一些點數。最後,如果紅色,則會取走點數。
設定項目
提供點數的方可以添加到任何包含點數的項目。例個體、實例,玩家收集點數的冒險遊戲。
點數追蹤
若要設置此項目,您需要一個排行榜來追蹤點數,以及一個變更顏色的零件。對於排行榜的代碼將會提供。
在 ServerScriptService 中創建名為 Leaderboard 的新指令碼。複製並貼入以下代碼到指令碼中。
--在 ServerScriptService 中,創建名為 PlayerSetup 的指令碼,並且包含以下內容。local Players = game:GetService("Players")local function onPlayerJoin(player)local leaderstats = Instance.new("Folder")leaderstats.Name = "leaderstats"leaderstats.Parent = player-- IntValue 的範例local points = Instance.new("IntValue")points.Name = "Points"points.Value = 0points.Parent = leaderstatsend-- 在 PlayerAdded 事件發生時執行Players.PlayerAdded:Connect(onPlayerJoin)
顏色變更零件
該指令碼會對零件分別執行三個不同的顏色。每個顏色都會有一個變數來儲存其 RGB 值,一種資料類型,包含三個數字(紅、綠、藍),以創建顏色。
建立名為 PointPart 的零件,並且附有名為 PointScript 的指令碼。
在 PointScript 中,使用 script.Parent 來參照零件。
local pointPart = script.Parent創建變數來儲存不同的顏色。每個變數應設為 Color3.fromRGB(),這創建一個顏色值。
- 藍色 (一些點數):(0, 0, 255)
- 綠色 (很多點數): (0, 255, 0)
- 紅色 (損失點數): (255, 0, 0)
local pointPart = script.Parent-- 顏色local blue = Color3.fromRGB(0, 0, 255)local green = Color3.fromRGB(0, 255, 0)local red = Color3.fromRGB(255, 0, 0)添加變數以對小量點的點數、大量點的點數和第三點的點數進行移除。
-- 顏色local blue = Color3.fromRGB(0, 0, 255)local green = Color3.fromRGB(0, 255, 0)local red = Color3.fromRGB(255, 0, 0)-- 點數值local smallPoints = 10local largePoints = 50local losePoints = 100
添加玩家服務
為了獲得點數,您需要取得存在於玩家下方欄位中的資訊,這資訊與玩家對話框中的角色對話框不同。這裡是資料如何像排行榜統計資料一樣可以找到的地方。
您可以這樣做,將 Players 服務添加到您的指令碼。 服務 是由 Roblox 工程師製作的額外預製功能集,以節省您的時間。
使用 玩家 服務輸入:
local Players = game:GetService("Players")
-- 點數值local smallPoints = 10local largePoints = 50local losePoints = 100-- 需要的服務local Players = game:GetService("Players")
功能和事件
PointsScript 需要兩個功能。第一個功能會提供和減去零件。第二個功能會檢查玩家是否觸摸零件。這些功能將然後連接到一個觸摸事件,這是一個觸摸事件發生時會執行的動作。
建立名為 givePoints() 的新函數,並且在 player 的參數。內部,添加一個 print 語句以便進行測試。
local Players = game:GetService("Players")-- 提供或減去點數local function givePoints(player)print("Giving player points")end在那之下,建立名為 partTouched() 的第二個函數,並且將參數命名為 otherPart。
-- 提供或減去點數local function givePoints(player)print("Giving player points")end-- 檢查玩家是否碰觸零件local function partTouched(otherPart)end在函數內,使用 function GetPlayerFromCharacter() 來檢查其他方塊變量是否包含玩家。
-- 檢查玩家是否碰觸零件local function partTouched(otherPart)local player = Players:GetPlayerFromCharacter(otherPart.Parent)end如果玩家碰到零件,它會被存儲在玩家變數內。如果沒有,變數將保持空。在你自擁有:
- 在函數內,檢查玩家是否有值。如果有,請呼叫 givePoints(player)。
- 在功能下,連接 partTouched() 到 pointPart 的觸摸事件。
-- 檢查玩家是否碰觸零件local function partTouched(otherPart)-- 獲得玩家如果碰到零件local player = Players:GetPlayerFromCharacter(otherPart.Parent)if player thengivePoints(player)endendpointPart.Touched:Connect(partTouched)執行項目。 每次玩家觸摸零件時,您應該看到輸出窗口中的訊息,說明:"Giving player points" 排障提示:
- 檢查 "Players" 在 game:GetService("Players") 中是否為大寫和引用。
- partTouched() 應該連接到 pointPart 的 Touched 事件。
建立鏈狀顏色
要在顏色上循環,腳本會使用一個 while = loop 來變更零件的顏色每幾秒。此循環的條件將是真的,因此它可以無限運行。
在指定是真的時候,在指定的時間內重複此動指令碼,以便確保循環始終執行。
-- 檢查玩家是否碰觸零件local function partTouched(otherPart)-- 獲得玩家如果碰到零件local player = Players:GetPlayerFromCharacter(otherPart.Parent)if player thengivePoints(player)endendpointPart.Touched:Connect(partTouched)-- 穿過顏色while true doend在您自擁有的時間,代碼一段時間真的循環,將點部分變更為您創建的顏色變量。不要忘記使用 task.wait() 之間的顏色。當您完成時,檢查您的代碼對版本進行了更新。
-- 在 3 個顏色之間跳過,在每個顏色之間等待while true dopointPart.Color = bluetask.wait(3)pointPart.Color = greentask.wait(2)pointPart.Color = redtask.wait(1)end播放測試並確認所有三個顏色的循環無暇停止。
排障提示
如果顏色循環無法如預期般運作,請從以下列中嘗試。
- 檢查程式指令碼是否在 底部 的程式碼中,在 Touched 事件下。如果程式碼不在底部,它就會保證其他部分的程式碼正常執行。
- 檢查 Color3.fromRGB() 內的每個顏色是否正確。必須有三個數字在零和 255 之間,例如 (255, 50, 0) 。
給玩家點數
玩家會在碰觸零件時,按照零件的顏色獲得分數。
尋找當前顏色
每次玩家觸摸零件時,腳本將需要知道零件的當前顏色,以便稍後給予點數。
尋找 givePoints() 。將測試訊息變更為點部分的當前顏色的變數。這個變數將決定玩家獲得 (或失去) 的點數。
local function givePoints(player)local currentColor = pointPart.Colorend要影響玩家的點數,這個函數需要存取玩家的排行榜。 建立一個變數來儲存它。
local function givePoints(player)local currentColor = pointPart.Colorlocal playerStats = player:WaitForChild("leaderstats")end現在添加變數以取得玩家的點數值,這是他們排行榜的一個子。
local function givePoints(player)local currentColor = pointPart.Colorlocal playerStats = player:WaitForChild("leaderstats")local playerPoints = playerStats:WaitForChild("Points")end
提供或控制點數
下一步,您使用 if 和 else 來提供或減去點數,這取決於零件的顏色。記住,藍色提供一小部分,綠色提供很多,而紅色減去點數。
在 givePoints() 內,使用 if 語句檢查變數是否為藍色,並在變數下方使用 add 語句將 smallPoints 添加到玩家的當前點數值。
local function givePoints(player)local currentColor = pointPart.Colorlocal playerStats = player:WaitForChild("leaderstats")local playerPoints = playerStats:WaitForChild("Points")if currentColor == blue thenplayerPoints.Value += smallPointsendend要檢查綠色,請在條件中添加另一個。如果綠色,請將 largePoints 變數添加到玩家的點數。
if currentColor == blue thenplayerPoints.Value += smallPointselseif currentColor == green thenplayerPoints.Value += largePointsend使用另一個聲明來減去點數,如果點數不是藍色或綠色。
if currentColor == blue thenplayerPoints.Value += smallPointselseif currentColor == green thenplayerPoints.Value += largePointselseplayerPoints.Value -= losePointsend最後, 摧毀 零件後,讓指令碼無法繼續發出點數。
if currentColor == blue thenplayerPoints.Value += smallPointselseif currentColor == green thenplayerPoints.Value += largePointselseplayerPoints.Value -= losePointsendpointPart:Destroy()測試並確認每個顏色是否如期提供點。請確認所有 三 個條件。
向玩家提供回饋
點部分可以運行,但玩家可能不會注意到任何事情發生,除非他們看到自己的排行榜。解決這個問題,創造粒子,當點部分被摧毀時。
添加玩家使用零件,例如音效、震動或粒子,使與對象交互更有滿意感。
創建粒子效果
粒子效果會與零件的顏色相同。顏色已儲存在變數中,因此很容易重用它們。
在 givePoints() 在底部,創建一個新的 粒子發射器 實個體、實例。請確保實例名稱正確地寫為所示。
local particle = Instance.new("ParticleEmitter")end粒子發射器使用顏色順序來控制顏色屬性。 建立新的顏色順序並將當前零件顏色傳入。
-- 摧毀零件pointPart:Destroy()-- 建立粒子local particle = Instance.new("ParticleEmitter")particle.Color = ColorSequence.new(currentColor)粒子必須要親給碰它的玩家。 建立一個變數來取得玩家的角色模型。 然後,親給粒子到玩家的頭部。
local particle = Instance.new("ParticleEmitter")particle.Color = ColorSequence.new(currentColor)local playerCharacter = player.Characterparticle.Parent = playerCharacter:WaitForChild("Head")使用 task.wait() 快速秒,然後摧毀粒子。
local particle = Instance.new("ParticleEmitter")particle.Color = ColorSequence.new(currentColor)local playerCharacter = player.Characterparticle.Parent = playerCharacter:WaitForChild("Head")task.wait(1)particle:Destroy()玩測試遊戲,並確認粒子在每個顏色碰觸後暫時跟隨玩家。
排障提示
如果此時此點,如果粒子不能如預期般運作,請從下方一個選項開始。
- 在創建新的實例時,ParticleEmitter 的名字會以正確的 方式 作為顯示和引用。
- 當指定粒子時,請務必在 : 和 playerCharacter 之間使用 WaitForChild() 作為分隔符。
完成點擊指令碼
指定的指令碼版本可以在下方參考。
local pointPart = script.Parent
--本地存儲 = 遊戲:GetService("ServerStorage")
-- 提供一些點數
local blue = Color3.fromRGB(0, 0, 255)
-- 提供更多點數
local green = Color3.fromRGB(0, 255, 0)
-- 讓玩家失去點數
local red = Color3.fromRGB(255, 0, 0)
-- 給玩家的黃金
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")
-- 根據零件的顏色提供金色給玩家
if currentColor == blue then
playerPoints.Value += smallPoints
elseif currentColor == green then
playerPoints.Value += largePoints
else
playerPoints.Value -= losePoints
end
-- 摧毀零件,等待一秒,然後摧毀粒子
pointPart:Destroy()
-- 創建火花效果並摧毀它
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)
-- 基於變數的更改零件的顏色。需要在指令碼底部。
while true do
pointPart.Color = blue
task.wait(4)
pointPart.Color = green
task.wait(3)
pointPart.Color = red
task.wait(2)
end