How to move a KinematicBody2D with Keyboard Left and Right

:information_source: Attention Topic was automatically imported from the old Question2Answer platform.
:bust_in_silhouette: Asked By RetroDan007
:warning: Old Version Published before Godot 3 was released.

How to move a KinematicBody2D with Keyboard Left and Right.

example: I press the key: Left move to left
I Press the key: Right move to right

:bust_in_silhouette: Reply From: eons

Many things of how to move a kinematic character depends on your design, but the basics are on the docs:
Official docs on Kinematic Character
https://godot.readthedocs.io/en/stable/tutorials/2d/kinematic_character_2d.html

And a basic (a bit old but useful) tutorial about Input and InputEvent
http://www.gamefromscratch.com/post/2015/01/28/Godot-Engine-Tutorial-Part-3-Program-Lifecycle-and-Input-Handling.aspx

Also, check the official demos on kinematic characters (there are 2 for the Stable).

Is to long. I Need sometingh like this:

extends Area2D

member variables here, example:

var motion
const SPEED = 250

func _ready():
set_process(true)
pass

func _process(delta):

motion = Vector2()

if Input.is_action_pressed("ui_up"):
	motion += Vector2(0,-1)
if Input.is_action_pressed("ui_down"):
	motion += Vector2(0,1)
if Input.is_action_pressed("ui_left"):
	motion += Vector2(-1,0)
if Input.is_action_pressed("ui_right"):
	motion += Vector2(1,0)

var pos = get_pos()
pos += motion * delta * SPEED
var size = get_viewport_rect().size

pos.x = clamp (pos.x,0,size.x)
pos.y = clamp (pos.y,0,size.y)

set_pos(pos)
pass

but for kinematicbody2d

RetroDan007 | 2016-11-07 22:53

:bust_in_silhouette: Reply From: RetroDan007

I solved:

# Codigo Jugador

extends KinematicBody2D

var se_mueve = false
var motion = Vector2(0,0)
var start_pos = Vector2(0,0)
const SPEED = 290.0

func _ready():
set_fixed_process(true)
start_pos = get_pos()
pass

func _fixed_process(delta):

if Input.is_action_pressed("Tecla_Izquierda"):
	se_mueve = true
	motion = Vector2(-1,0)
	start_pos = get_pos()

if Input.is_action_pressed("Tecla_Derecha"):
	se_mueve = false
	motion = Vector2(1,0)
	start_pos = get_pos()

var pos = start_pos

pos += motion * delta * SPEED
set_pos(pos)

pass

you should use: move instead of set_pos, set_pos will ignore collisions

MrMonk | 2016-11-08 08:10

You should mark this as the answer to your question, if it is solved

Tybobobo | 2016-11-08 21:16

You’re right “set_pos()” ignores collisions. I have problems with my game.

Sorry if some words are not understood. I’m using google translato

RetroDan007 | 2016-11-12 22:51