déplacement: décélération en changement de direction
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.
This commit is contained in:
20
princesse.gd
20
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
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user