I tried adding a charged jump function into my game, which on short press makes the player jump normally, but when held down makes the player jump higher depending on how much time it was held for.
hum:SetStateEnabled(Enum.HumanoidStateType.Jumping, false); uis.InputBegan:Connect(function(input, t) if t then return end if input.UserInputType == Enum.UserInputType.Keyboard then local key = input.KeyCode; if key == Enum.KeyCode.Space and not(shiftdown) and not(inair) then if canJump and stamina.Value > 15 then spacedown = true; print("down") while spacedown do counter += 0.1; wait(0.1); end elseif stamina.Value > 5 then hum.JumpPower = 25; hum.Jump = true; end else (...) end end end) uis.InputEnded:Connect(function(input, t) if t then return end if input.UserInputType == Enum.UserInputType.Keyboard then local key = input.KeyCode; if key == Enum.KeyCode.Space and spacedown then hum:SetStateEnabled(Enum.HumanoidStateType.Jumping, true); hum.JumpPower = math.clamp(counter*20, 25, 60); hum.Jump = true; spacedown = false; counter = 0; inair = true; print("up") else (...) end end end) hum.StateChanged:Connect(function(old, new) if (old == Enum.HumanoidStateType.Freefall) or (new == Enum.HumanoidStateType.Landed) then if not(spacedown) then hum:SetStateEnabled(Enum.HumanoidStateType.Jumping, false); print("landed") inair = false; end end end)
The player only jumps every second time, and always a small jump, no matter how long I hold it down. There are no errors in the output, and "up" and "down" only appear when the player doesn't jump. Any ideas why it doesn't work?