Browse Source

Small bugfix in 3D platformer

Gravity vector is zero in the first few frames, leading to errors in follow-up calculations expecting a normalized  vector. Fixed by assigning a default gravity in case those cases.
Thomas Karcher 6 years ago
parent
commit
1cfb3ee621
3 changed files with 3 additions and 1 deletions
  1. 2 0
      3d/platformer/enemy.gd
  2. 1 1
      3d/platformer/player.gd
  3. BIN
      3d/platformer/stage.scn

+ 2 - 0
3d/platformer/enemy.gd

@@ -19,6 +19,8 @@ func _integrate_forces(state):
 	var delta = state.get_step()
 	var lv = state.get_linear_velocity()
 	var g = state.get_total_gravity()
+	# get_total_gravity returns zero for the first few frames, leading to errors
+	if g == Vector3.ZERO: g = Vector3 (0, -9.8, 0)
 
 	lv += g * delta # Apply gravity
 	var up = -g.normalized()

+ 1 - 1
3d/platformer/player.gd

@@ -135,7 +135,7 @@ func _physics_process(delta):
 		else:
 			anim = ANIM_AIR_DOWN
 		
-		var hs
+		# var hs
 		if dir.length() > 0.1:
 			hv += target_dir * (accel * 0.2) * delta
 			if (hv.length() > max_speed):

BIN
3d/platformer/stage.scn