33 lines
945 B
GDScript3
33 lines
945 B
GDScript3
|
|
extends CharacterBody2D
|
||
|
|
|
||
|
|
@export var START_SPEED = 300.0
|
||
|
|
@export var SPEED_INCREMENT = 20.0
|
||
|
|
|
||
|
|
var current_speed = START_SPEED
|
||
|
|
var direction = Vector2.ZERO
|
||
|
|
|
||
|
|
func _ready() -> void:
|
||
|
|
reset_ball()
|
||
|
|
|
||
|
|
func _physics_process(delta: float) -> void:
|
||
|
|
# Bewegt den Ball und handhabt die Kollisionen mit den Schlägern
|
||
|
|
var collision = move_and_collide(direction * current_speed * delta)
|
||
|
|
|
||
|
|
if collision:
|
||
|
|
direction = direction.bounce(collision.get_normal())
|
||
|
|
current_speed += SPEED_INCREMENT
|
||
|
|
|
||
|
|
# Abprallen an den horizontalen Rändern (oben und unten)
|
||
|
|
if global_position.y < 0 or global_position.y > 648:
|
||
|
|
direction.y *= -1
|
||
|
|
|
||
|
|
func reset_ball() -> void:
|
||
|
|
# Startet exakt in der Mitte des 1152x648 Bildschirms
|
||
|
|
global_position = Vector2(576, 324)
|
||
|
|
current_speed = START_SPEED
|
||
|
|
|
||
|
|
# Zufällige Richtung nach links oder rechts starten
|
||
|
|
var x_dir = 1 if randf() > 0.5 else -1
|
||
|
|
var y_dir = randf_range(-0.5, 0.5)
|
||
|
|
direction = Vector2(x_dir, y_dir).normalized()
|