I am making a 2D platformer, and I am having some weird issues. Sometimes, I spawn in the sky. Other times, the "win part" takes 4 seconds to teleport a player. I'm not sure what the issue is.
Humanoid Setup:
game.Players.PlayerAdded:Connect(function(p) p.CharacterAdded:Connect(function(c) local h = c.Humanoid h.WalkSpeed = 32 h.JumpPower = 100 end) end)
Leaderboard:
local DataStoreService = game:GetService("DataStoreService") local myDataStore = DataStoreService:GetDataStore("platformer-V9") local loaded= false game.Players.PlayerAdded:Connect(function(p) local ls = Instance.new("Folder") ls.Parent = p ls.Name = "leaderstats" local vcf = Instance.new("IntValue") vcf.Parent = ls vcf.Name = "Level" vcf.Value = 1 local data local success, errormessage = pcall(function() data = myDataStore:GetAsync(p.UserId.."-level") end) if success then vcf.Value = data or vcf.Value loaded = true else print("ERROR WHILE GETTING DATA!") warn(errormessage) end repeat wait() until p.Character local c = p.Character if loaded ~= true then repeat wait() until loaded == true and c:FindFirstChild("HumanoidRootPart") end wait(2) local lvls = {} for _,level in pairs(workspace.Levels:GetChildren()) do lvls[level:WaitForChild("Stage").Value] = level end local h = c:WaitForChild("HumanoidRootPart") local ttt2 = vcf.Value or 0 h.CFrame = lvls[ttt2].StartPart.CFrame end) game.Players.PlayerRemoving:Connect(function(player) local success, errormessage = pcall(function() myDataStore:SetAsync(player.UserId.."-level",player.leaderstats.Level.Value) end) if success then print("OMG! IT WAS SAVED!") else print("NOOOO! THERE WAS AN ERROR!") warn(errormessage) end end)
Teleporter (IMPORTANT SCRIPT):
local lf = game.Workspace.Levels local lvls = {} local c = false for i,level in pairs(lf:GetChildren()) do local wp = level:WaitForChild("WinPart") lvls[i] = level wp.Touched:Connect(function(tou) if c ~= true then if game.Players:GetPlayerFromCharacter(tou.Parent) then c = true wait(2) local tp = game.Players[tou.Parent.Name] local h = tp.Character:WaitForChild("HumanoidRootPart") tp.leaderstats.Level.Value = tp.leaderstats.Level.Value + 1 h.CFrame = lvls[tp.leaderstats.Level.Value].StartPart.CFrame coroutine.resume(coroutine.create(function() wait(1) c = true end)) end end end) end
Camera Script (DOUBT THIS IS THE ISSUE):
local cameraHeight = 1 local cameraZOffset = 35 local cameraXChase = 1 local cameraSpeed = .25 local camera = game.Workspace.CurrentCamera local player = game.Players.LocalPlayer local RunService = game:GetService('RunService') local function setupCamera() camera.CFrame = CFrame.new(Vector3.new(0,cameraHeight,cameraZOffset), Vector3.new(0,cameraHeight,0)) end setupCamera() player.CharacterAdded:connect(setupCamera) local function onUpdate() if player.Character and player.Character:FindFirstChild('UpperTorso') then camera.CFrame = CFrame.new(player.Character:WaitForChild("HumanoidRootPart").CFrame.p + Vector3.new(0,cameraHeight,cameraZOffset)) end end RunService.Heartbeat:Connect(function() onUpdate() end)
Control Script (DOUBT THIS IS THE ISSUE):
local player = game.Players.LocalPlayer local RunService = game:GetService('RunService') local ContextActionService = game:GetService('ContextActionService') local jumping = false local sliding = false local leftValue, rightValue = 0, 0 local function onLeft(actionName, inputState) if inputState == Enum.UserInputState.Begin then leftValue = 1 elseif inputState == Enum.UserInputState.End then leftValue = 0 end end local function onRight(actionName, inputState) if inputState == Enum.UserInputState.Begin then rightValue = 1 elseif inputState == Enum.UserInputState.End then rightValue = 0 end end local function onJump(actionName, inputState) if inputState == Enum.UserInputState.Begin then jumping = true elseif inputState == Enum.UserInputState.End then jumping = false end end local function onUpdate() if player.Character and player.Character:FindFirstChild('Humanoid') then if jumping then player.Character.Humanoid.Jump = true end local moveDirection = rightValue - leftValue player.Character.Humanoid:Move(Vector3.new(moveDirection,0,0), false) end end RunService:BindToRenderStep('Control', Enum.RenderPriority.Input.Value, onUpdate) ContextActionService:BindAction('Left', onLeft, true, 'a', Enum.KeyCode.Left, Enum.KeyCode.DPadLeft) ContextActionService:BindAction('Right', onRight, true, 'd', Enum.KeyCode.Right, Enum.KeyCode.DPadRight) ContextActionService:BindAction('Jump', onJump, true, 'w', Enum.KeyCode.Space, Enum.KeyCode.Up, Enum.KeyCode.DPadUp, Enum.KeyCode.ButtonA)