GDScript:如何在密钥预设时播放动画?

时间:2016-05-14 08:54:32

标签: macos animation gdscript godot

我对编码非常陌生并且我还在尝试使用不同的语言,我开始使用GameMaker Studio,因为它与Mac的兼容性而改为Godot我可能会因为GameMaker已经出局而学习更新的内容很长一段时间。

我想创建一个RPG游戏并将动画应用到角色移动的每个方向,但动画仅在按下并抬起按键后播放。这意味着当按下我的键时,动画停止,动画仅在我的角色静止时播放,这与我想要的完全相反。该剧本看起来非常直截了当,但似乎无法奏效。

我会将其标记为GDScript语言而不是Python,但我想我没有足够的信誉来制作新标记,所以我在python下标记它,因为它是最相似的。     #variables     扩展了KinematicBody2D

const spd = 100

var direction = Vector2()

var anim_player = null

func _ready():
    set_fixed_process(true)
    anim_player = get_node("move/ani_move")

#movement and sprite change
func _fixed_process(delta):
    if (Input.is_action_pressed("ui_left")) :
         direction.x = -spd
         anim_player.play("ani_player_left")
    elif (Input.is_action_pressed("ui_right")):
        direction.x =  spd
        anim_player.play("ani_player_right")
    else:
         direction.x = 0

    if (Input.is_action_pressed("ui_up")) :
         direction.y = -spd
         anim_player.play("ani_player_up")
    elif (Input.is_action_pressed("ui_down")):
         direction.y =  (spd)
         anim_player.play("ani_player_down")
    else:
         direction.y = 0

    if (Input.is_action_pressed("ui_right")) and (Input.is_action_pressed("ui_left")):
        direction.x = 0
    if (Input.is_action_pressed("ui_up")) and (Input.is_action_pressed("ui_down")) :
        direction.y = 0

    # move
    var motion = direction * delta
    move(motion)

2 个答案:

答案 0 :(得分:1)

当您检查_fixed_process中的输入时,您会多次调用anim_player.play()一帧,这似乎总是会重新启动动画,从而始终保持动画的第一帧可见

一旦释放密钥,anim_player.play()就会停止将动画重置为开始,并且它实际上可以继续播放以下帧。

一个简单的直接解决方案是记住您上次播放的动画,并且只在变化后立即致电play()

答案 1 :(得分:0)

您需要知道动画是否已更改

首先,您需要将这些变量放在代码中:

var currentAnim = ""
var newAnim = ""

然后在你的_fixed过程中添加它:

if newAnim != anim:
    anim = newAnim
    anim_player.play(newAnim)

要更改您使用的动画:

newAnim = "new animation here"