【发布时间】:2016-09-27 11:04:57
【问题描述】:
我正在使用 ROBLOX 制作一个关于勇者斗恶龙英雄火箭史莱姆坦克战斗系统的游戏(虽然没有使用 100% 的 GUI)
由于我不知道如何在普通 ROBLOX 中让弹药锁定在路径上,所以我决定使用 gui 来显示弹药“开火”
为此,我有一个远程事件,它会在加载弹药时在 GUI 系统的主脚本中触发一个函数
cannon.Touched:connect(function(v)
if fireable[v.Name] and v.Parent == workspace then
event:FireAllClients("Left",v.Name)
v:Destroy()
end
end)
然后,GUI 会为加载的弹药获取正确的精灵并将其从右侧坦克中发射出去(FireAllClients 部分中的第一个参数)
这是发射弹药的两个 if 语句之一(另一个实际上是相同的,只是它用于右侧坦克)
local tank = tankFiring == "Left" and tank1 or tankFiring == "Right" and tank2
if tank == tank1 then
print("yo!")
script.Fire:Play()
local ammoFrame = sp.Ammo:Clone()
ammoFrame.Parent = tank
ammoFrame.Visible = true
ammoFrame.Position = UDim2.new(0,120,0,68)
playAnimation("Cannon Fire",UDim2.new(0,120,0,68-25),tank.Frame)
ammoFrame.Image = ammoTypes[type]["img"]
ammoFrame.Size = ammoTypes[type]["Size"]
repeat
wait(.1)
ammoFrame.Rotation = ammoTypes[type]["Rotatable"] == true and ammoFrame.Rotation + 15 or 0
ammoFrame.Position = ammoFrame.Position + UDim2.new(0,1,0,0)
until
tank2:FindFirstChild("Ammo") and isTouching(ammoFrame,tank2:GetChildren()[3]) or isTouching(ammoFrame,tank2) or ammoFrame == nil
if tank2:FindFirstChild("Ammo") and isTouching(ammoFrame,tank2:GetChildren()[3]) then
script.Collision:Play()
local lastAmmoPos = ammoFrame.Position
playAnimation("Explosion",lastAmmoPos-UDim2.new(0,15,0,25),tank.Frame)
ammoFrame:Destroy()
tank2:GetChildren()[3]:Destroy()
end
if isTouching(ammoFrame,tank2) then
script.Collision:Play()
ammoFrame:Destroy()
workspace["Tank2"].Health.Value = workspace["Tank2"].Health.Value - ammoTypes[type]["dmg"]
end
end
这样做的问题是,如果玩家在弹药被射击后加入,他们将不会在 GUI 上看到弹药
有没有办法解决这个问题?我不能再 FireAllClients,因为这只会为所有玩家发射另一发弹药。
【问题讨论】: