So I made(am making) a game with a top down styled "scriptable" camera. You use WASD or arrows and it adds velocity in the corresponding direction. The camera is super laggy for some reason.
--Movement Script--
local player = game.Players.LocalPlayer
local mouse = player:GetMouse()
local left = false
local right = false
local up = false
local down = false
local bVel = nil
local angle = game.Workspace.Angle
--[[ 0.1 - 0.5 = Heavy Friction; 0.5 - 0.9 Low Friction]]
local friction = .9
ball = nil
game.StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.Health, false)
game.StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.Backpack, false)
game.StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.PlayerList, false)
player.CharacterAdded:connect(function()
wait()
player.Character.Parent = game.Lighting
for i,v in pairs(game.Workspace:GetChildren())do
if v.Name == "Ball" then
if v:FindFirstChild('Owner') then
if v.Owner.Value == player.Name then
ball = v
bVel = ball.BodyVelocity
end
end
end
end
end)
mouse.KeyDown:connect(function(key)
--if player.PlayerGui.Playing.Value == true and player.PlayerGui.inGame.Value ~= "" or player.PlayerGui.Playing.Value == false and player.PlayerGui.inGame.Value == "" then
k = string.byte(key)
if k == 97 or k == 20 then
left = true
end
if k == 100 or k == 19 then
right = true
end
if k == 119 or k == 17 then
up = true
end
if k == 115 or k == 18 then
down = true
end
--else
-- k = nil
--end
end)
mouse.KeyUp:connect(function(key)
--if player.PlayerGui.Playing.Value == true and player.PlayerGui.inGame.Value ~= "" or player.PlayerGui.Playing.Value == false and player.PlayerGui.inGame.Value == "" then
k = string.byte(key)
if k == 97 or k == 20 then
left = false
end
if k == 100 or k == 19 then
right = false
end
if k == 119 or k == 17 then
up = false
end
if k == 115 or k == 18 then
down = false
--end
end
end)
function loop()
if ball ~= nil then
bVel.velocity = bVel.velocity * Vector3.new(friction,friction,friction)
if left == true then
bVel.velocity = bVel.velocity - Vector3.new(2,0,0)
end
if right == true then
bVel.velocity = bVel.velocity + Vector3.new(2,0,0)
end
if up == true then
bVel.velocity = bVel.velocity - Vector3.new(0,0,2)
end
if down == true then
bVel.velocity = bVel.velocity + Vector3.new(0,0,2)
end
end
end
game:GetService("RunService").RenderStepped:connect(function()
loop()
end)
--Camera Script--
local player = game.Players.LocalPlayer
local ball = nil
player.CharacterAdded:connect(function()
wait()
for i,v in pairs(game.Workspace:GetChildren())do
if v.Name == "Ball" then
if v:FindFirstChild('Owner') then
if v.Owner.Value == player.Name then
ball = v
end
end
end
end
end)
function loop()
if ball ~= nil then
cam = game.Workspace.CurrentCamera
cam.CameraSubject = ball
cam.CameraType = "Scriptable"
cam.CoordinateFrame = CFrame.new(ball.Position + Vector3.new(0,50,0)) * CFrame.Angles(-1.4,0,0)
end
end
game:GetService("RunService").RenderStepped:connect(function()
loop()
end)
At first I thought it was the fact that I was using wait() instead of renderstepped, but that did nothing.
Thank you in advance :D
