Topic was automatically imported from the old Question2Answer platform.
Asked By
ROBOTOO007
i’m new to godot and am making a pong game to practice, i tried making an AI and it works but the movement is extremely clunky when the ball gets near to the paddle
here’s my code:
var speed: = Vector2(0.0 , 100.0)
var direction: = Vector2(0.0,0.0)
var velocity:= Vector2(0.0,0.0)
Called when the node enters the scene tree for the first time.
func _ready() → void:
pass
Called every frame. ‘delta’ is the elapsed time since the previous frame.
func _physics_process(delta: float) → void:
position.x = 135
var ball = get_parent().get_node(“ball”).position
if ball.y < position.y:
direction.y = -1
velocity = speed * direction
move_and_slide(velocity)
elif ball.y > position.y:
direction.y = 1
velocity = speed * direction
move_and_slide(velocity)
What do you mean by “extremely clunky”? What is the problem you’re trying to solve here?
njamster | 2020-02-20 17:21
the platform won’t stop moving up and down really quickly instead of just adjusting cleanly
Perhaps decrease your speed variable as the ball gets closer?
Otherwise the paddle tries to make fine grain adjustments but is going too fast and that makes it jump around.
Unless the y-position of the ball and your paddle are exactly the same, the paddle will move. Try adding an offset, like this:
onready var ball = get_node("../ball")
func _ready():
position.x = 135
func _physics_process(delta):
var y_dist = sqrt(pow(ball.position.y - position.y, 2))
if y_dist < (speed.y * delta):
# not far enough away to move
direction = Vector2.ZERO
elif ball.position.y > position.y:
# far enough to move and ball below the paddle
direction = Vector2.DOWN
elif ball.position.y < position.y:
# far enough to move and ball above the paddle
direction = Vector2.UP
velocity = speed * direction
move_and_slide(velocity)
I chose speed.y * delta as an offset, because that’s the distance your paddle will move in one frame. So the paddle will only move if the ball is at least one full move away. This prevents the tremor you observed without slowing down the paddle.