# How to make the movement in one direction while sprite is moving

Attention Topic was automatically imported from the old Question2Answer platform.

Hi
I want to know what I must adjust in order for the movement to be in one direction, and the player’s path cannot be changed until he hits the wall

``````extends KinematicBody2D

const SPEED = 50
const ACCELERATION = 20
var velocity = Vector2()
var swipe = ''
const SWIPED_SPEED = 10
var gameLoop = true

func _process(delta):

if gameLoop:
if swipe && swipe != 'swiped':
if swipe == 'up':
velocity.y = int(-SPEED*ACCELERATION)
print(swipe)
if swipe == 'down':
velocity.y = int(SPEED*ACCELERATION)
print(swipe)
if swipe == 'right':
velocity.x = int(-SPEED*ACCELERATION)
print(swipe)
if swipe == 'left':
velocity.x = int(SPEED*ACCELERATION)
print(swipe)

swipe = 'swiped'

velocity.normalized()

velocity = move_and_slide(velocity)

func _input(event):
if event is InputEventScreenDrag:
if !swipe:
if event.relative.y < -SWIPED_SPEED:
swipe = 'up'

if event.relative.x < -SWIPED_SPEED:
swipe = 'right'

if event.relative.x > SWIPED_SPEED:
swipe = 'left'

if event.relative.y > SWIPED_SPEED:
swipe = 'down'

elif event is InputEventScreenTouch:
if !event.pressed:
swipe = ''
``````

In your direction checks change `if` to `elif` after your first `if` statement

Assuming you’ve setup walls for detection use KinematicBody2D’s `is_on_wall()`

``````func _process(delta):
if gameLoop:
if swipe && swipe != 'swiped' && is_on_wall():
if swipe == 'up':
......
elif swipe == 'down':
......
``````

I have changed if to elif it did not work. The player can still be diverted from its path while moving. As for the walls, I used TileMap and the player stopped when hitting it.

raed | 2021-01-18 20:09

I solved it by adding this code to process func and it work perfect

if velocity.length() == 0:

raed | 2021-01-18 20:09