我尝试使用 2D 播放器控制器的默认脚本,但现在我正在努力根据脚本中的方向变量制作不同的动画。
错误消息表明我需要在
input.get_axis()
语句中为 if
提供 2 个参数。 我只放了 1,这样当我离开时,精灵面就会离开,但它不起作用。
extends CharacterBody2D
const SPEED = 300.0
const JUMP_VELOCITY = -400.0
func _physics_process(delta: float) -> void:
$AnimatedSprite2D
var direction := Input.get_axis("ui_left", "ui_right")
# Add the gravity.
if not is_on_floor():
velocity += get_gravity() * delta
# Handle jump.
if Input.is_action_just_pressed("ui_accept") and is_on_floor():
if direction == Input.get_axis("ui_left"):
set_animation("default")
velocity.y = JUMP_VELOCITY
# Get the input direction and handle the movement/deceleration.
# As good practice, you should replace UI actions with custom gameplay actions.
if direction:
velocity.x = direction * SPEED
else:
velocity.x = move_toward(velocity.x, 0, SPEED)
move_and_slide()
我尝试过查找,但找不到任何东西。
查看 Input.getAxis 的文档:Docs
该函数始终需要两个参数。一种为阴性,一种为阳性。结果是 -1 和 1 之间的浮点数,表示轴在特定方向之一移动的距离。
对于您的方向变量,这意味着:如果用户将摇杆完全向左移动,方向将为 -1,因为您声明了这是您的负面操作。完全正确的是 1。
总之,如果你想检查,如果玩家向左移动,你的比较应该如下所示:
if direction < 0:
我假设你只有左右动画,因为这看起来像是平台游戏的开始。
使用
Input.get_axis()
,浮点数存储在变量 direction
中。如果向左走,direction
设置为 -1
,如果向右走,direction
设置为 1
。如果您不按任何按钮,direction
将设置为 0
。
因此,如果您想根据方向更改动画,可以选中
if direction < 0
表示左侧,或 if direction > 0
表示右侧。如果您想要角色正在运行/空闲的动画,您还需要在检查跳跃之外执行此操作。
现在还有一些其他要点可以帮助您。
您在
$AnimatedSprite2D
中引用 _physics_process
,但您没有将其存储在任何地方,因此您实际上无法使用它。你会想要这样的东西:
var animated_sprite = $AnimatedSprite2D
.
由于 Godot 中加载内容的方式,您还需要将其移至
_physics_process
之外并移至脚本主体中。如果不这样做,您的脚本将尝试在每个物理帧加载 AnimatedSprite2D
(每秒 60 次)。因此,在常量的顶部,您需要添加 @onready 标签:
@onready var animated_sprite = $AnimatedSprite2D.
这将允许您使用
animated_sprite.play(<animation_name>)
更改动画。
现在,对于重力,您当前将其直接添加到速度,而不是速度的
y
分量。 Velocity 使用 Vector2
,它具有 x
和 y
组件。您可以将从左到右的任何东西视为 x
部分,将向上或向下的任何东西视为 y
部分。
所以,在这里我将使用 velocity.y += get_gravity() * delta
来使重力上下作用。