How do I use clamping for a KinematicBody in a _physics_process() function?

Attention Topic was automatically imported from the old Question2Answer platform.
``````    extends KinematicBody2D

export (int) var speed = 200
var screen_size
var initial_pos_y = 100
screen_size = get_viewport_rect().size

func _physics_process(delta):
var velocity = Vector2()
if Input.is_action_pressed("move_up"):
velocity.y -= 1
if Input.is_action_pressed("move_left"):
velocity.x -= 1
if Input.is_action_pressed("move_right"):
velocity.x += 1
if Input.is_action_pressed("move_down"):
velocity.y += 1
if velocity.length() > 0:
velocity = velocity.normalized() * speed
position += velocity * delta
position.x += clamp(position.x,0,screen_size.x)
position.y += clamp(position.y,0,screen_size.y)

if velocity.x != 0:
\$AnimatedSprite.animation = "moving"
\$AnimatedSprite.flip_h = false
\$AnimatedSprite.flip_h = velocity.x < 0
else:
\$AnimatedSprite.animation = "default"
``````

//So ,this is the problem.Clamping won’t work…

You may want to elaborate more (what are you trying to achieve, what is going wrong), but my first guess is you should use `=` instead of `+=` when assigning the position using clamp. If the position is already off the scree (you appear to want to bound the position to within the screen), then your clamp logic won’t bring the position back onto the screen. So for example: trying doing

``````position.x = clamp(position.x,0,screen_size.x)
position.y = clamp(position.y,0,screen_size.y)
``````

This will force the position to be within the screen bounds I believe

I want a simple movement for a kinematic body.I have,indeed, addressed the problem as you’ve shown me , although previously I had sent my failed attempt in resolving the issue,yet I still don’t have the expected result.The character goes beyond its’ boundaries…

It might be a relative position issue. Maybe using `global_position` instead of `position` could solve the problem. If that fails, you could create walls to prevent the kinematic body from moving beyond the walls, and place the walls where there boundaries are