我正在做一个跳跃游戏,我希望排行榜上的JumpBoost值为该对象的JumpBoost的值
<script src="baz.com/foo"></script>
<script>
foo.bar();
</script>
我尝试了这个,但是没有用,我想不出另一种方式
如果我测试游戏并在触摸物体后跳跃,则我的跳跃是正常的,而不是领导者的统计量
答案 0 :(得分:0)
我认为您的问题是您根本没有正确访问Leaderstats值。
您在game.Players
中找到的播放器与game.Workspace
中的播放器有所不同。 game.Players
中的一个是Leaderstats文件夹所在的位置,game.Workspace
中的一个是玩家的人形生物所在的位置。
要更改leaderstats值,您需要使用人形机器人来了解哪个玩家触摸了零件,然后从game.Players
获取实际的Player对象以正确访问该文件夹。
local boostPart = script.Parent
local function onPartTouch(otherPart)
-- get the player that touched the boost block
local partParent = otherPart.Parent
local humanoid = partParent:FindFirstChildWhichIsA("Humanoid")
if ( humanoid ) then
-- a player touched this, prevent more collisions
boostPart.CanCollide = false
-- get the current player's jump power by looking into the players leaderstats
local playerService = game.Players
local playerName = partParent.Name
local currentPlayer = playerService[playerName]
local playerGold = currentPlayer.leaderstats.gold.Value -- << gold?
-- give the player a temporary boost
local currentJumpPower = humanoid.JumpPower
if ( currentJumpPower < playerGold) then
humanoid.JumpPower = playerGold
-- reset the player's jump power
wait(5)
humanoid.JumpPower = currentJumpPower
end
end
end
boostPart.Touched:Connect(onPartTouch)
这应该使您能够正确读取Leaderstats值。如果要更改它们,则可以使用同一系统导航到Players文件夹并更改值。
答案 1 :(得分:0)
要回答标题问题“如何使局部变量成为另一个脚本中的局部变量的值”,Roblox拥有使用BindableEvents和BindableFunctions传递数据的系统。 / p>
一个简单的示例假设您在工作区中有一个BindableEvent。
本地脚本1:
local myValue = 1
local bEvent = game.Workspace.BindableEvent
-- listen for actions fired from other scripts
bEvent.Event:Connect(function(newValue)
myValue = newValue
print("Script 1 - myValue has changed to ", myValue)
end
print("Script 1 - myValue originally equals ", myValue)
本地脚本2:
wait(1)
local bEvent = game.Workspace.BindableEvent
-- tell the other scripts that the value has changed
print("Script 2 - firing change signal")
bEvent:Fire(10)
如果您有许多不同的运动部件,并且希望通过集中方式传达更改信息,并且不想构建自定义数据传递系统,则这种系统非常有用。