Else/If Practice with Giving Points (Thực hành với điểm cho phép)

*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.

Dự án này sẽ sử dụng các tuyên bố điều kiện để tạo một phần mà sẽ cho hoặc lấy điểm trên bảng xếp hạng tùy thuộc vào màu của phần khi chạm vào. Nếu màu xanh, thì sẽ cho người chơi một vài điểm. Nếu màu xanh lá, thì sẽ cho một lượng

Tạo dự án

Điểm đến có thể được thêm vào bất kỳ dự án nào mà điểm đến liên quan. Ví ví dụ / trường hợp, một trò chơi phiêu lưu mà người chơi thu thập điểm.

Theo dõi điểm

Để cài đặt dự án này, bạn sẽ cần một bảng xếp hạng để theo dõi các điểm và một phần thay đổi màu sắc. Mã cho bảng xếp hạng sẽ được cung cấp.

  1. Tạo một script mới ở ServerScriptService có tên là Leaderboard. Sao chép và hoàn chỉnh mã bên dưới vào script.


    --Trong ServerScriptService, tạo một script tên là PlayerSetup với nội dung bên dưới.
    local Players = game:GetService("Players")
    local function onPlayerJoin(player)
    local leaderstats = Instance.new("Folder")
    leaderstats.Name = "leaderstats"
    leaderstats.Parent = player
    -- Ví dụ về một IntValue
    local points = Instance.new("IntValue")
    points.Name = "Points"
    points.Value = 0
    points.Parent = leaderstats
    end
    -- Chạy onPlayerJoin khi sự kiện PlayerAdded bắt đầu
    Players.PlayerAdded:Connect(onPlayerJoin)

Thay đổi màu sắc của bộ phận

Script sẽ lặp lại ba màu khác nhau cho phần. Mỗi màu sẽ có một biến để lưu giá trị RGB của nó, một loại dữ liệu bao gồm một loạt ba số (màu đỏ, màu xanh, màu xanh) tạo ra các màu.

  1. Tạo một phần tên là PointPart với một script đính kèm tên là PointScript.

  2. Trong PointScript, hãy sử dụng script.Parent để tham khảo bộ phận.


    local pointPart = script.Parent
  3. Tạo các biến để lưu các màu khác nhau. Mỗi biến nên được đặt Color3.fromRGB() , tạo một giá trị màu.

    • Màu xanh (Một số điểm): (0, 0, 255)
    • Xanh Lá (Nhiều Điểm): (0, 255, 0)
    • Đỏ (Mất Điểm): (255, 0, 0)

    local pointPart = script.Parent
    -- Màu
    local blue = Color3.fromRGB(0, 0, 255)
    local green = Color3.fromRGB(0, 255, 0)
    local red = Color3.fromRGB(255, 0, 0)
  4. Thêm biến cho một lượng nhỏ của điểm, một lượng lớn hơn của điểm và một lượng thứ ba để loại bỏ điểm.


    -- Màu
    local blue = Color3.fromRGB(0, 0, 255)
    local green = Color3.fromRGB(0, 255, 0)
    local red = Color3.fromRGB(255, 0, 0)
    -- Giá trị điểm
    local smallPoints = 10
    local largePoints = 50
    local losePoints = 100

Thêm Dịch Vụ Người Chơi

Để đạt được điểm, bạn sẽ cần phải có quyền truy cập thông tin của người chơi được lưu trong Explorer dưới Mục chơi, và nó được tách biệt khỏi mục đối tượng nhân vật. Đây là nơi thông tin như thống kê bảng xếp hạng có thể được tìm thấy.

Bạn có thể làm điều này bằng cách thêm dịch vụ Players vào script của bạn. Services là một loạt các hàm được xây dựng trước đó của Roblox để tiết kiệm thời gian cho bạn.

  1. Lấy dịch vụ Người chơi bằng cách nhập:

    local Players = game:GetService("Players")


    -- Giá trị điểm
    local smallPoints = 10
    local largePoints = 50
    local losePoints = 100
    -- Các dịch vụ cần thiết
    local Players = game:GetService("Players")

Hàm và sự kiện

PointsScript sẽ cần hai chức năng. Chức năng đầu tiên sẽ cho và lấy các bộ phận. Chức năng thứ hai sẽ kiểm tra nếu một người chạm vào bộ phận đó. Các chức năng này sẽ sau đó được kết nối với một sự kiểm tra chạm, chạy mỗi khi bộ phận đó được chạm.

  1. Tạo một chức năng mới có tên là givePoints() và một biến đổi tên là player . Bên trong, thêm một câu chuyển dữ liệu để sử dụng cho mục kiểm tra.


    local Players = game:GetService("Players")
    -- Cộng hoặc trừ điểm
    local function givePoints(player)
    print("Giving player points")
    end
  2. Dưới đó, tạo một chức năng thứ hai tên là partTouched() với một biến tùy chỉnh tên là otherPart .


    -- Cộng hoặc trừ điểm
    local function givePoints(player)
    print("Giving player points")
    end
    -- Kiểm tra xem người chơi đã chạm vào bộ phận nào không
    local function partTouched(otherPart)
    end
  3. Trong chức năng, sử dụng chức năng GetPlayerFromCharacter() để kiểm tra có phải có người chơi trong biến đổng đối tượng khác.


    -- Kiểm tra xem người chơi đã chạm vào bộ phận nào không
    local function partTouched(otherPart)
    local player = Players:GetPlayerFromCharacter(otherPart.Parent)
    end
  4. Nếu một người chạm vào bộ phận, nó sẽ được lưu trong biến người chơi. Nếu không, biến sẽ ở trong trống. Trên cá sở hữucủa bạn:

    • Trong hàm, kiểm tra xem người chơi có giá trị không. Nếu có, thì gọi givePoints(player) .
    • Dưới chức năng, kết nối partTouched() với sự kiện pointPart đã được chạm.

    -- Kiểm tra xem người chơi đã chạm vào bộ phận nào không
    local function partTouched(otherPart)
    -- Nhận người chơi nếu một người chạm vào bộ phận
    local player = Players:GetPlayerFromCharacter(otherPart.Parent)
    if player then
    givePoints(player)
    end
    end
    pointPart.Touched:Connect(partTouched)
  5. Chạy dự án. Mỗi khi một người chạm vào bộ phận, bạn nên thấy một thông điệp trong Cửa sổ Ra mắt nói: "Giving player points" Mẹo giải quyết vấn đề:

  • Kiểm tra rằng "Players" ở trong game:GetService("Players") được viết hoa và dấu chấm câu.
  • partTouched() nên kết nối với sự kiện Touched của điểm.

Tạo màu lặp

Để lặp qua các màu, script sẽ sử dụng một while = loop that changes the part's color every few seconds. Điều kiện cho loop này sẽ đúng, so it can run indefinitely.

  1. Ở cuối của script, tạo một lần lượt mới trong đó điều kiện là đúng, có nghĩa là lần lượt luôn luôn chạy.


    -- Kiểm tra xem người chơi đã chạm vào bộ phận nào không
    local function partTouched(otherPart)
    -- Nhận người chơi nếu một người chạm vào bộ phận
    local player = Players:GetPlayerFromCharacter(otherPart.Parent)
    if player then
    givePoints(player)
    end
    end
    pointPart.Touched:Connect(partTouched)
    -- Lặp qua màu
    while true do
    end
  2. Bằng cách chính sở hữu, code a while true do loop that changes pointPart to the color variables you've created. Đừng quên sử dụng task.wait() between colors. When finished, check your code against the version bên dưới.


    -- Loops qua 3 màu, chờ đợi giữa mỗi màu
    while true do
    pointPart.Color = blue
    task.wait(3)
    pointPart.Color = green
    task.wait(2)
    pointPart.Color = red
    task.wait(1)
    end
  3. Chơi-kiểm tra và kiểm tra rằng tất cả ba màu lượt lại mà không bị gián đoạn.

Mẹo dịch vụ

Tại thời điểm này, nếu lỗ lặp màu không hoạt động như ý muốn, hãy thử một trong những lựa chọn dưới đây.

  • Kiểm tra có phải lệnh while ở dưới cuối cùng của script, dưới sự kiểm soát của sự kiểm tra Touched . Nếu lệnh while không ở dưới, nó sẽ giữ các bộ phận khác của script không chạy đúng cách.
  • Kiểm tra mỗi màu trong Color3.fromRGB() được viết đúng chính tả. Nó phải có ba số giữa 0 và 255 được phân cách bởi các dấu chấm câu, như (255, 50, 0) .

Đang đưa người chơi điểm

Người chơi sẽ nhận điểm dựa trên màu hiện tại của bộ phận khi họ chạm vào nó.

Tìm màu hiện tại

Mỗi khi một người chạm vào bộ phận, script sẽ cần biết màu hiện tại của bộ phận để sau đó trao điểm.

  1. Tìm thấy givePoints() . Thay thế tin nhắn thử nghiệm của bạn bằng một biến cho màu hiện tại của pointPart. Biến này sẽ xác định số điểm mà người chơi nhận (hoặc mất).


    local function givePoints(player)
    local currentColor = pointPart.Color
    end
  2. Để ảnh hưởng đến điểm của một người chơi, chức năng đó cần quyền truy cập vào bảng xếp hạng của người chơi. Tạo một biến để lưu nó.


    local function givePoints(player)
    local currentColor = pointPart.Color
    local playerStats = player:WaitForChild("leaderstats")
    end
  3. Bây giờ thêm một biến để nhận giá trị Điểm của người chơi, là một con của bảng xếp hạng của họ.


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

Cấp hoặc Giảm Điểm

Tiếp theo, bạn sẽ sử dụng if và else để cho hoặc trừ điểm tùy thuộc vào màu của bộ phận khi chạm. Hãy nhớ rằng blue cung cấp một số lượng nhỏ, green cung cấp nhiều và red subtracts points.

  1. Trong givePoints() , dưới biến, sử dụng một if statement để kiểm tra màu hiện tại là xanh và nếu vậy thì thêm smallPoints vào giá trị điểm hiện tại của người chơi.


    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. Để kiểm tra xanh, thêm một else if condition. If xanh, then add the largePoints variable to người chơi's points.


    if currentColor == blue then
    playerPoints.Value += smallPoints
    elseif currentColor == green then
    playerPoints.Value += largePoints
    end
  3. Sử dụng một câu nói khác để trừ điểm nếu điểmPart không màu xanh hoặc màu xanh lá cây.


    if currentColor == blue then
    playerPoints.Value += smallPoints
    elseif currentColor == green then
    playerPoints.Value += largePoints
    else
    playerPoints.Value -= losePoints
    end
  4. Cuối cùng, phá hủy phần sau câu if để khiến cho script không thể tiếp tục đưa ra các điểm.


    if currentColor == blue then
    playerPoints.Value += smallPoints
    elseif currentColor == green then
    playerPoints.Value += largePoints
    else
    playerPoints.Value -= losePoints
    end
    pointPart:Destroy()
  5. Chơi thử và kiểm tra rằng mỗi màu cho điểm như mong đợi. Hãy chắc chắn để kiểm tra tất cả các điều kiện ba .

Đang cho người chơi phản hồi

The PointPart hoạt động, nhưng người chơi có thể không nhận thấy một cái gì đó xảy ra trừ khi họ nhìn vào bảng xếp hạng của họ. Sửa điều đó bằng cách tạo ra các hạt khi PointPart bị phá hủy.

Thêm phản hồi khi người chơi sử dụng một phần, chẳng hạn như âm thanh, rung hoặc hạt, làm cho các tương tác với các thống kê dễ hơn cho người chơi.

Tạo hiệu ứng hạt nhân

Hiệu ứng hạt nhân sẽ có màu tương tự như bộ phận khi chạm. Vì màu sắc đã được lưu trong biến, nên dễ dàng tái sử dụng chúng.

  1. Ở dưới, tạo một givePoints() mới. Đảm bảo tên instream được viết chính xác như đã cho thấy.


    local particle = Instance.new("ParticleEmitter")
    end
  2. ParticleEmitter sử dụng chuỗi màu để điều khiển màu của chúng. Tạo một màu mới và truyền màu hiện tại của bộ phận.


    -- Phá hủy bộ phận
    pointPart:Destroy()
    -- Tạo hạt
    local particle = Instance.new("ParticleEmitter")
    particle.Color = ColorSequence.new(currentColor)
  3. Hạt sẽ cần phải được gắn vào người chơi đã chạm vào nó. Tạo một biến để lấy mô hình Nhân vật của người chơi. Sau đó, gắn hạt vào đầu người chơi.


    local particle = Instance.new("ParticleEmitter")
    particle.Color = ColorSequence.new(currentColor)
    local playerCharacter = player.Character
    particle.Parent = playerCharacter:WaitForChild("Head")
  4. Sử dụng task.wait() cho một giây nữa, sau đó tiêu diệt các hạt.


    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. Thử nghiệm trò chơi và đảm bảo các hạt nhỏ theo người chơi sau khi chạm vào mỗi màu.

Mẹo dịch vụ

Tại thời điểm này, nếu các hạt không hoạt động như ý muốn, hãy thử một trong những lựa chọn dưới đây.

  • Làm khi tạo một mô hình mới mà ParticleEmitter được viết chính xác như đã cho thấy và bên trong những dấu chấm câu.
  • Khi làm cha của các hạt, hãy chắc chắn sử dụng : giữa playerCharacterWaitForChild() mà không có khoảng cách giữa.

Hoàn tất PointScript

Một phiên bản hoàn thành của script có thể được tham khảo ở dưới đây.


local pointPart = script.Parent
--lưu trữ địa phương = trò chơi:GetService("ServerStorage")
-- Đưa ra một số điểm
local blue = Color3.fromRGB(0, 0, 255)
-- Đưa thêm điểm
local green = Color3.fromRGB(0, 255, 0)
-- Khiến người chơi mất điểm
local red = Color3.fromRGB(255, 0, 0)
-- vàng được đưa cho người chơi
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")
-- Tặng người chơi vàng dựa trên màu của bộ phận
if currentColor == blue then
playerPoints.Value += smallPoints
elseif currentColor == green then
playerPoints.Value += largePoints
else
playerPoints.Value -= losePoints
end
-- Phá hủy bộ phận, đợi một giây và sau đó phá hủy hạt
pointPart:Destroy()
-- Tạo ra một hiệu ứng lấp lánh và tiêu diệt nó
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)
-- Đổi màu của bộ phận dựa trên biến. Cần phải ở dưới cùng của script.
while true do
pointPart.Color = blue
task.wait(4)
pointPart.Color = green
task.wait(3)
pointPart.Color = red
task.wait(2)
end