我对编码非常陌生并且我还在尝试使用不同的语言,我开始使用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)
答案 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"