Hi, this is my first solo project in Godot 4.1, but I cannot find any working 2D Isometric movement based tutorials.
This is the closest I could find to move my player in the isometric positions but does not run.
Any help would be appreciated.

`extends CharacterBody2D

const speed = 100
var motion = Vector2()

func cartesian_to_isometric(cartesian):
var screen_pos = Vector2()
screen_pos.x = cartesian.x - cartesian.y
screen_pos.y = cartesian.x / 2 + cartesian.y / 2
return screen_pos

func fixed_process(delta):
var direction = Vector2()

if Input.is_action_pressed("move_up"):
	direction += Vector2(0,-1)
elif Input.is_action_pressed("move_down"):
	direction += Vector2(0,1)
	
if Input.is_action_pressed("move_right"):
	direction += Vector2(1,0)
elif Input.is_action_pressed("move_left"):
	direction += Vector2(-1,0)
	
motion = direction.normalized() * speed * delta

#move(motion)`

The 2D Isometric Demo for Godot 3.5 should be still relevant.
You need to make some change to the code because on 4.1.1 there is velocity parameter as default, and move_and_slide use it as default, but the movement for x and y should be still good.

https://godotengine.org/asset-library/asset/112

There's an iso demo for 3.5 in the godot asset library. There's only a little code which looks like it'll work in 4.x if you just change KinematicBody2D to CharacterBody2d. But if in doubt, just run it in 3.5.

https://github.com/godotengine/godot-demo-projects/tree/3.5-9e68af3/2d/isometric
(EDIT: this is the same one @fatalox linked)

Don't limit yourself to Godot resources, there's a lot of good older information on making isometric games. You will want to familiarize yourself with Godot 4.x's new Tilemaps though.

Hi, I worked through the tutorials and this is leading to a problem,
move_and_slide wont accept a parameter, without the parameter nothing seems to happen, heres the new code if you can see the problem.

`extends CharacterBody2D

const VELOCITY_SPEED = 100 # Pixels/second.

func physics_process(delta):
var velocity = Vector2()
velocity.x = Input.get_action_strength("move_right") - Input.get_action_strength("move_left")
velocity.y = Input.get_action_strength("move_down") - Input.get_action_strength("move_up")
velocity.y /= 2
velocity = velocity.normalized() * VELOCITY_SPEED

move_and_slide(velocity)
#move_and_slide()

`

Many thanks for looking.

    Venkman This guide should fix your through, have many details to adjust even the speed.
    With Godot 4.1 you don't declare the variant velocity because its already build inside.

    Hi, with this code in the above tutorial the player moves on a 2d axis not a isometric axis.
    The question Im asking is how to apply the cartesian to isometric func to make the movement
    move on a isometric axis.
    Here is the code from the tutorial which I`m referring to...

    `extends CharacterBody2D

    const speed = 100
    const acceleration =1000
    const friction = 50

    var input = Vector2.ZERO
    #var screen_size = get_viewport_rect().size

    func _physics_process(delta):
    player_movement(delta)

    func cartesian_to_isometric(cartesian):
    var screen_pos = Vector2()
    screen_pos.x = cartesian.x - cartesian.y
    screen_pos.y = (cartesian.x + cartesian.y) /2
    return screen_pos

    func get_input():
    input.x = int(Input.is_action_pressed("move_right")) - int(Input.is_action_pressed("move_left"))
    input.y = int(Input.is_action_pressed("move_down")) - int(Input.is_action_pressed("move_up"))
    return input.normalized()

    func player_movement(delta):
    input = get_input()

    if input == Vector2.ZERO:
    	if velocity.length() > (friction * delta):
    		velocity -= velocity.normalized() * (friction * delta)
    	else:
    		velocity = Vector2.ZERO
    else:
    	velocity += (input * acceleration * delta)	
    	velocity = velocity.limit_length(speed)
    	
    	#velocity = cartesian_to_isometric(input)
    move_and_slide()`

    Solved:
    `func player_movement(delta):
    input = get_input()

    if input == Vector2.ZERO:
    	if velocity.length() > (friction * delta):
    		velocity -= velocity.normalized() * (friction * delta)
    	else:
    		velocity = Vector2.ZERO
    else:
    	#velocity += (input * acceleration * delta)	
    	velocity = velocity.limit_length(speed)
    	
    	velocity += cartesian_to_isometric(input * acceleration * delta)
    move_and_slide()`

    This moves the player on a Isometric axis, thanks all : ]