终点线
本课属于 Coddy Lua 学习旅程的“Roblox 游戏脚本编写”单元。第 24 课,共 25 课。
冲过终点线就算获胜,获胜者会被送回起点。player:LoadCharacterAsync()会在玩家的出生点为其生成一个全新的角色,不必等待重生计时器结束。
这需要一点时间。在新角色出现之前,终点线会继续对旧角色的其他身体部位触发Touched,每次触发都会算作获胜。防抖机制可以避免这种情况,而且终点线需要为每个玩家分别设置,这样两名玩家同时冲线时都能获胜。将其存入一个以玩家为键的表中:
local busy = {}
if not busy[player] then
busy[player] = true
-- 记录胜利次数,再将玩家传送回去
task.wait(1)
busy[player] = nil
endbusy[player]会读取或设置表中对应玩家的条目,而不存在的条目值为nil。busy[player] = nil会将其移除,这样玩家下次冲线时就能再次获胜。
挑战
中等每当玩家到达金色终点垫时,就记 1 次胜利。每位玩家的防抖机制已准备就绪。
- 将玩家的
Wins加 1。 - 用
player:LoadCharacterAsync()将玩家送回起点。 - 经过
task.wait(1)后,清除玩家在busy中的防抖状态,这样玩家下次跑到终点时也会计数。
按“开始”,跑到终点两次:Wins 显示 2。然后按“检查”。
亲手试试
local Players = game:GetService("Players")
local finish = script.Parent
local busy = {}
finish.Touched:Connect(function(hit)
local player = Players:GetPlayerFromCharacter(hit.Parent)
if player and not busy[player] then
busy[player] = true
-- 1. 将玩家的 Wins 加 1
-- 2. 将玩家送回起点
-- 3. 过 1 秒后,让玩家可以再次获胜
end
end)
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
Roblox 游戏脚本编写中的所有课
自己练习: Lua 在线编译器