Godot Version
4.2.2
Question
Hi, I’m kinda new to Godot and game development and I’m having problems implementing player movement the way I wanted it to look like.
If I’m pressing two keys to move diagonally and then don’t release them at the exact same time, the engine thinks only one key was pressed at the end. It wouldn’t be such a problem if it weren’t for my idea to rotate the character sprite according to velocity and then also have the character move a little bit after the input is stopped.
It doesn’t feel good to play at all because of that and it’s really annoying to have to release the keys perfectly on the same frame…
Is there any way to deal with that? Make it so even if the timing is a little off, the sprite won’t get rotated and keep moving in the wrong direction?
Here’s my code for context:
extends CharacterBody2D
const SPEED = 120.0
const FRICTION = 200.0
func _physics_process(delta):
var sprite = $"."
var direction = Input.get_vector("move left", "move right", "move up", "move down")
if direction:
velocity = direction * SPEED
else:
velocity.x = move_toward(velocity.x, 0, FRICTION * delta)
velocity.y = move_toward(velocity.y, 0, FRICTION * delta)
if velocity > Vector2(1, 1):
velocity.normalized()
var trail = $trail
if velocity.length() > 0:
var angle = velocity.angle() + deg_to_rad(90.0)
sprite.rotation = angle
if velocity.x != 0 || velocity.y != 0:
trail.emitting = true
else:
trail.emitting = false
move_and_slide()
Thanks in advance for any help!