基本的玩家平台游戏代码,但不能在 godot 中使用基于方向的动画

问题描述 投票:0回答:2

我尝试使用 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()

我尝试过查找,但找不到任何东西。

game-development godot gdscript godot4
2个回答
0
投票

查看 Input.getAxis 的文档:Docs

该函数始终需要两个参数。一种为阴性,一种为阳性。结果是 -1 和 1 之间的浮点数,表示轴在特定方向之一移动的距离。

对于您的方向变量,这意味着:如果用户将摇杆完全向左移动,方向将为 -1,因为您声明了这是您的负面操作。完全正确的是 1。

总之,如果你想检查,如果玩家向左移动,你的比较应该如下所示:

if direction < 0:

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
来使重力上下作用。

© www.soinside.com 2019 - 2024. All rights reserved.