From 66293d6bb233c6549034c42666eaa14f0c709537 Mon Sep 17 00:00:00 2001 From: Thomas Lavocat Date: Sat, 29 Apr 2023 14:59:07 +0200 Subject: [PATCH] =?UTF-8?q?d=C3=A9placement:=20d=C3=A9c=C3=A9l=C3=A9ration?= =?UTF-8?q?=20en=20changement=20de=20direction?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Le personnage doit perdre en vélocité sur l'axe précédant lorsque le jour demande de changer de direction pour avoir un effet smooth de déplacement. La stratégie choisie consite à détecter qu'un changement de direction est en cours puis de remettre l'index d'accélération à son état d'initialisation et de laisser accélérer le personnage classiquement. Sauf que lorsque l'on va calculer sa vitesse, l'on va rajouter la vélocité déjà présente ce qui aura pour effet de smoother tout ça. --- princesse.gd | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/princesse.gd b/princesse.gd index 31032c7..13f2df2 100644 --- a/princesse.gd +++ b/princesse.gd @@ -37,7 +37,8 @@ var walking_step: int = -1 @export var WALK_INCR_GROUND : int = 1 @export var WALK_INCR_AIR : int = 3 var walk_incr_reserve : int = 0 -var init_decel: bool = false +var init_decel: bool = true +var init_direction_change = true # variables d'état relatives au saut var jumping : bool = false @@ -66,6 +67,17 @@ func walk(direction:int) -> float: if is_on_wall(): walking_step = min(walking_step, 1) + # Un changement de direction implique de perdre la vélocité dans la direction + # précédente avant de repartir dans la direction que l'on veut. + # ça ne change rien pour le nombre de frames nécéssaires pour accélérer dans + # tous les cas. Mais le feeling est meilleur. + var direction_change: bool = (direction > 0 and velocity.x < 0) or (direction < 0 and velocity.x > 0) + if direction_change: + if init_direction_change: + init_direction_change = false + walking_step = -1 + else: + init_direction_change = true # Si le joueur décide de marcher alors, le compteur de pas doit s'incrémenter # Si le joueur ne veut plus marcher, alors, le compteur de pas décrémente @@ -97,7 +109,11 @@ func walk(direction:int) -> float: if walk_incr_reserve >= threshold: walk_incr_reserve = 0 walking_step-=1 - return speed * direction + if direction_change and walking: + # dans le cas du changement de direction, + return speed * direction + velocity.x + else: + return speed * direction return velocity.x