瀏覽代碼

Corrige la super vitesse quand attrapage dessous

Lorsque la raquette touchait une balle qui etait en train de mourir, la
balle s'arretait, sa vitesse augmentait, et lorsque la raquette etait
decalee, la balle extremement rapide etait liberee.
DricomDragon 11 月之前
父節點
當前提交
852ef71dd1
共有 1 個文件被更改,包括 8 次插入5 次删除
  1. 8 5
      godot/composants/objets/balle/balle.gd

+ 8 - 5
godot/composants/objets/balle/balle.gd

@@ -22,7 +22,7 @@ func _physics_process(delta: float) -> void:
 	if impact != null:
 		_rebondir(impact)
 		var obstacle: Object = impact.get_collider()
-		if obstacle is Raquette:
+		if obstacle is Raquette and en_train_de_monter():
 			_orienter_tir(obstacle)
 			_accelerer()
 		elif obstacle is Brique:
@@ -41,6 +41,10 @@ func detruire() -> void:
 	queue_free()
 
 
+func en_train_de_monter() -> bool:
+	return _mouvement.y < 0.0
+
+
 func _rebondir(impact: KinematicCollision2D) -> void:
 	_mouvement = _mouvement.bounce(impact.get_normal())
 
@@ -48,10 +52,9 @@ func _rebondir(impact: KinematicCollision2D) -> void:
 func _orienter_tir(raquette: Raquette) -> void:
 	var difference = global_position.x - raquette.position.x
 	_mouvement = Vector2.UP.rotated(difference * ratio_diff_angle) * _mouvement.length()
-	
-	# empeche la balle de traverser la raquette
-	if _mouvement.y > 0:
-		_mouvement.y = -ascension_min
+
+	# empeche la balle de monter trop lentement
+	_mouvement.y = min(_mouvement.y, -ascension_min)
 
 
 func _accelerer() -> void: