1

我对编码很陌生,我仍在尝试不同的语言,我从 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)
4

2 回答 2

1

当您在 中检查输入时_fixed_process,每帧调用anim_player.play()几次,这似乎总是重新启动动画,因此始终保持动画的第一帧可见。

只要你松开按键,anim_player.play()动画就会停止重新开始,它实际上可以继续播放下面的帧。

一个简单直接的解决方案是记住您播放的最后一个动画,并且仅play()在它更改时才调用。

于 2016-05-25T10:09:05.760 回答
0

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

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

var currentAnim = ""
var newAnim = ""

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

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

要更改您使用的动画:

newAnim = "new animation here"
于 2017-10-14T21:12:47.893 回答