【发布时间】:2019-02-09 00:04:17
【问题描述】:
我的简单平台游戏中有一个脚本,它说如果我的玩家在地面上并且按下“Z”,他在 Y 轴上的移动将上升到 600,如果他不在地面上,他将执行跳跃动画。
所以事情是这样的,我知道它只播放跳跃动画的第一帧,因为代码不断检测玩家在空中。 我想要一种方法告诉代码只触发一次动画。
我尝试使用一个名为input_(event): 的函数,但它似乎没有is_action_just_pressed 类型的输入,只有is_action_pressed。
我对 Godot 还很陌生,不知道如何使用信号。信号可能会通过 animation_finished() 提供帮助,尽管该功能可能与我在代码中实际想要做的事情无关。
这是我的代码:
extends KinematicBody2D
#Variables van aquí
var movimiento = Vector2();
var gravedad = 20;
var arriba = Vector2(0, -1);
var velocidadMax = 600;
var fuerza_salto = -600;
var aceleracion = 5;
var saltando = false;
func _ready(): # Esto es void Start()
pass;
func _physics_process(delta): #Esto es void Update()
movimiento.y += gravedad;
if Input.is_action_pressed("ui_right"):
$SonicSprite.flip_h = true;
$SonicSprite.play("Walk");
movimiento.x = min(movimiento.x +aceleracion, velocidadMax);
elif Input.is_action_pressed("ui_left"):
$SonicSprite.flip_h = false;
$SonicSprite.play("Walk");
movimiento.x = max(movimiento.x-aceleracion, -velocidadMax);
else:
movimiento.x = lerp(movimiento.x, 0, 0.09);
$SonicSprite.play("Idle");
if is_on_floor():
if Input.is_action_just_pressed("z"):
movimiento.y = fuerza_salto;
else:
$SonicSprite.play("Jump");
movimiento = move_and_slide(movimiento, arriba)
【问题讨论】:
-
欢迎来到 stackoverflow Jorge。您能否添加
is_on_floor()函数的代码。我认为问题出在那儿。