Menu
CoddyTech

沿路径行走

Coddy Roblox 游戏:塔防 课程的第 3 课,共 22 课。

Humanoid 使用 MoveTo 行走,到达目的地时会触发 MoveToFinished 事件。等待 8 秒后,它会放弃并触发 false,因此在较长路段上移动缓慢的敌人会被再次发送移动指令,直到到达目的地:

repeat
	humanoid:MoveTo(points[4].Position)
until humanoid.MoveToFinished:Wait()

走完整条路径需要时间,因此 walkPath 会在自己的线程中通过 task.spawn(walkPath, enemy) 运行,而 spawnEnemy 会继续执行并返回。

challenge icon

挑战

简单

让 Zombie 沿着路径行走。

  1. 编写 walkPath(enemy):对于 i = 2, #waypoints,重复执行 enemy.Humanoid:MoveTo(waypoints[i].Position),直到 MoveToFinished:Wait() 表示它已到达,或 not enemy.Parent;如果敌人不在了,就返回。
  2. 在 spawnEnemy 中,return enemy 之前,添加 task.spawn(walkPath, enemy)。

按“运行”:Zombie 会沿着路径走到蓝色基地。然后按“检查”。

亲手试试

local Players = game:GetService("Players")
local ServerStorage = game:GetService("ServerStorage")
local Settings = require(game.ReplicatedStorage.Settings)

local enemies = workspace.Enemies

print("The base can take " .. Settings.BaseHealth .. " hits")

-- 按顺序排列的路径点(名称依次为 1、2、3……)
local waypoints = workspace.Path.Waypoints:GetChildren()
table.sort(waypoints, function(a, b)
	return tonumber(a.Name) < tonumber(b.Name)
end)

-- 每个玩家的排行榜上都有 Money
Players.PlayerAdded:Connect(function(player)
	local leaderstats = Instance.new("Folder")
	leaderstats.Name = "leaderstats"
	leaderstats.Parent = player

	local money = Instance.new("IntValue")
	money.Name = "Money"
	money.Value = Settings.StartMoney
	money.Parent = leaderstats
end)

-- 第 3 课:在这里添加沿路径行走的代码

-- 一个新敌人出现在入口处,沿路径行走
local function spawnEnemy(kind)
	local enemy = ServerStorage.Enemies[kind]:Clone()
	-- 放在第一个路径点的正上方
	enemy:PivotTo(waypoints[1].CFrame + Vector3.new(0, 5, 0))
	enemy.Parent = enemies
	return enemy
end

-- 目前只有一个敌人
spawnEnemy("Zombie")

Roblox 游戏:塔防中的所有课

自己练习: Roblox 在线编辑器