I am trying to make my character to move. It actually moves in the right direction and the animation only activates the first frame. (There is two animations with two frames each: up and walk to the right, and with code flips when you move the other way as you see in my code). But when it moves, it does onle a few pixels.
I tried to change the speed but the characthers instead of move smoothly moves in jumps.
Here is my code in gdscript
:
extends Area2D
signal hit
@export var speed = 4000
var screen_size # Size of the game window.
func _ready():
screen_size = get_viewport_rect().size
#hide()
func _process(delta):
var velocity = Vector2.ZERO #The player's movement vector.
if Input.is_action_just_pressed("move_down"):
velocity.y += 1
if Input.is_action_just_pressed("move_up"):
velocity.y -= 1
if Input.is_action_just_pressed("move_right"):
velocity.x += 1
if Input.is_action_just_pressed("move_left"):
velocity.x -= 1
if velocity.length() > 0:
velocity = velocity.normalized() * speed
$AnimatedSprite2D.play()
else:
$AnimatedSprite2D.stop()
position += velocity * delta
position = position.clamp(Vector2.ZERO, screen_size)
if velocity.x != 0:
$AnimatedSprite2D.animation = "walk"
$AnimatedSprite2D.flip_v = false
# See the note below about boolean assignment.
$AnimatedSprite2D.flip_h = velocity.x < 0
elif velocity.y != 0:
$AnimatedSprite2D.animation = "up"
$AnimatedSprite2D.flip_v = velocity.y > 0
func _on_body_entered(body):
hide() #Player dissappears after being hit.
hit.emit()
# Must be deferred as we can't change physics properties on a physics callback.
$CollisionShape2D.set_deferred("disabled", true)
func start(pos):
position = pos
show()
$CollisionShape2D.disabled = false
With speed of 400. There is not much difference between With speed of 4000. The second image is the place where the character moves only when I press the arrow of the keyboard.
The characther with only one touch of the arrow. There wasn't a smooth move, only the jump
The method
is_action_just_pressed
returnstrue
only the first frame the action is pressed. Useis_action_pressed
instead.