【发布时间】:2021-03-25 10:40:21
【问题描述】:
我正在开发一款基于 6 人回合的 Roblox 游戏,如果任一时间用完或除一名幸存者之外的所有玩家都仍然存在,则每回合都会结束。在每一轮之后,玩家(以及在这一轮中被杀的人)被传送回大厅,然后是短暂的中场休息,然后将 bak 传送到地图中以开始新一轮(随机选择了许多不同的地图)。我对这款游戏的策略是在所有地图周围创建一个大区域,并在回合中随着计时器倒计时,不断检测该区域中的 # 名玩家。当该数字变为 1 时,该回合将结束并宣布获胜者。这种方法有两个问题:
-
我必须创建一个巨大的区域来包含所有不同的地图,并且随着我添加更多地图,该区域必须变得越来越大。一次最多只能有 6 名玩家出现在一张地图中,是否会在如此大的区域内检测到 # 名玩家?
-
我的玩家检测脚本不工作。它检测到一名玩家,但当有 2 名玩家时,它仍然返回“1”作为玩家人数。为了解决这个问题,我创建了一个简单的游戏,它检测玩家何时在一个区域(灰色底板)以及他们何时离开该区域(红色底板)。当我在游戏中公开运行游戏 - https://www.roblox.com/games/6060804433/Rounds - 有 2 名玩家时,它只返回游戏中的 1 名玩家(我在左上角的 GUI 中显示)。我的代码如下 - 我认为问题在于表/字典 playerFound 的工作方式。
代码:
regionPart = game.Workspace.RegionFromThisPart -- I created a transparent cube to define the region
pos1, pos2 = (regionPart.Position - (regionPart.Size/2)),(regionPart.Position + (regionPart.Size/2))
region = Region3.new(pos1,pos2)
Status = game.ReplicatedStorage.Status
wait(5)
while wait(1) do
partsInRegion = workspace:FindPartsInRegion3(region, game.Workspace.Baseplate,1000)
playersFound = {} -- table of players found
for i, part in pairs (partsInRegion) do
if part.Parent:FindFirstChild("Humanoid") ~= nil then
playersFound["playerinregion"] = part.Parent -- add players character to table
print (i, part) -- 0
end
end
function Length(playersFound)
local counter = 0
for _, v in pairs(playersFound) do
counter =counter + 1
end
return counter
end
Status.Value = Length(playersFound) .." players in region"
end
额外问题:我创建的用于显示该地区玩家数量的 GUI 显示在我的屏幕上,但不显示其他玩家的屏幕(屏幕上显示“标签”)。
我花费了大量时间来转动我的车轮,非常感谢帮助解决这个问题。
谢谢!
【问题讨论】: