Menu
CoddyTech

终点线

本课属于 Coddy Lua 学习旅程的“Roblox 游戏脚本编写”单元。第 24 课,共 25 课。

冲过终点线就算获胜,获胜者会被送回起点。player:LoadCharacterAsync()会在玩家的出生点为其生成一个全新的角色,不必等待重生计时器结束。

这需要一点时间。在新角色出现之前,终点线会继续对旧角色的其他身体部位触发Touched,每次触发都会算作获胜。防抖机制可以避免这种情况,而且终点线需要为每个玩家分别设置,这样两名玩家同时冲线时都能获胜。将其存入一个以玩家为键的表中:

local busy = {}
if not busy[player] then
	busy[player] = true
	-- 记录胜利次数,再将玩家传送回去
	task.wait(1)
	busy[player] = nil
end

busy[player]会读取或设置表中对应玩家的条目,而不存在的条目值为nil。busy[player] = nil会将其移除,这样玩家下次冲线时就能再次获胜。

challenge icon

挑战

中等

每当玩家到达金色终点垫时,就记 1 次胜利。每位玩家的防抖机制已准备就绪。

  1. 将玩家的 Wins 加 1。
  2. 用 player:LoadCharacterAsync() 将玩家送回起点。
  3. 经过 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)
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

Roblox 游戏脚本编写中的所有课

自己练习: Lua 在线编译器