瀏覽代碼

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 1 年之前
父節點
當前提交
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: