2016-05-14 3 views
1

Je suis très novice en matière de codage et j'essaie toujours différentes langues, j'ai commencé avec GameMaker Studio et j'ai changé pour Godot en raison de sa compatibilité avec Mac. Je pourrais aussi apprendre quelque chose de plus récent depuis que GameMaker est sorti . Je veux créer un jeu RPG et appliquer une animation dans chaque direction du personnage, mais l'animation ne joue que lorsque la touche est enfoncée ET levée. Cela signifie que pendant que l'on appuie sur ma touche, l'animation s'arrête et l'animation ne joue que lorsque mon personnage est immobile, ce qui est le contraire de ce que je veux. Le script a semblé très simple, mais ne semble pas fonctionner. Je marquerais ceci comme le langage GDScript au lieu de Python, mais je suppose que je ne suis pas assez réputé pour faire un nouveau tag, donc je l'ai marqué sous python parce que c'est le plus similaire. #variables étend KinematicBody2DGDScript: Comment jouer une animation pendant que la touche est préconfigurée?

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

Est-ce que ma réponse pourrait vous aider, avez-vous besoin de plus d'infos? Si cela a aidé, ce serait génial si vous pouvez l'accepter =) –

Répondre

1

Comme vous vérifiez l'entrée en _fixed_process, vous appelez anim_player.play() plusieurs fois par trame, qui semble toujours redémarrer l'animation, et donc, conserve la première image de l'animation visible tous le temps.

Dès que vous relâchez la touche, anim_player.play() arrête de réinitialiser l'animation pour démarrer et peut effectivement lire les images suivantes. Une solution simple et directe consisterait à se souvenir de la dernière animation jouée et à n'appeler que play() dès qu'elle sera modifiée.

0

Vous devez savoir si l'animation a changé

D'abord, vous avez besoin de mettre ces variables dans votre code:

var currentAnim = "" 
var newAnim = "" 

Et puis vous ajoutez dans votre processus _fixed:

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

Pour changer l'animation que vous utilisez:

newAnim = "new animation here"