Ball velocity starts to high

Godot Version

v4.3

Question

Hello, I’m new to GDScript and need help with a problem. I’m working on a physics demo, just to test myself, and I’ve enqountered an issue. I have three balls in my main scene, one of them is perfect, bouncing then coming to a rest soon after, the other two are bouncing forever, from the top to the bottom of the window, at maximum speed.

ball scene:

@tool
extends Entity
class_name ball

# exports
@export var diameter : int = 64
@export var color : Color = "ff0000"

# variables
var radius : int = 32

# constants
const GRAVITY : float = 9.8 # m/sec^2\

func _process(delta: float) -> void:
	$Sprite2D.modulate = color
	$Sprite2D.scale = Vector2(diameter / 64, diameter / 64)
	$CollisionShape2D.scale = Vector2(diameter / 64, diameter / 64)

# physics
func _physics_process(delta: float) -> void:
	if !Engine.is_editor_hint():
		var collision = move_and_collide(velocity + acceleration * delta)
		
		if collision:
			var collider = collision.get_collider()
			if collider == $"../floor" || collider == $"../ceiling":
				velocity.y = -velocity.y
			elif collider == $"../left_wall" || collider == $"../right_wall":
				velocity.x = -velocity.x
			else:
				velocity = -velocity


		
		change_positions(delta)


func change_positions(delta: float):
	print(str($".") + str(velocity))
	acceleration.y += GRAVITY * delta
	velocity = Vector2(min(terminal_velocity, velocity.x + acceleration.x * delta), min(terminal_velocity, velocity.y + acceleration.y * delta))
	

All three of the balls come from the same scene but act differently. I don’t know how to fix it. but I have found out that the two that are bouncing quickly have a super high velocity compared to the other one even when I simply start the scene. All help is appreciated and welcome, thank you in advance!

P.S. if you need more info on other scenes I have (like my entity scene) feel free to ask

Edit:
My entity scene, as it is very small.

extends CharacterBody2D
class_name Entity

# exports
@export var sprite_texture : Sprite2D
@export var mass : float = 1.0

# variables
var acceleration = Vector2(0, 0)
var terminal_velocity : int = 1000

Screenshot 2025-02-05 145647
Here is a screenshot of the seperate velocities for each ball, Ball is fine, the other twos Y velocity is super high for some reason.

Also just found out, that if I copy and paste the first ball it also works just fine. It’s just whenever I instantiate a new ball scene.

I figuerd out the issue. When I made my Ball script a @tool script I forgot to change the Physics proccesing to be only when not in editor.

if !Engine.is_editor_hint():

so it saved the velocity it had before I added it, which made all other balls that now shared that new velocity bounce crazily.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.