Inhaltsverzeichnis

Godot 3 - Platformer Tutorial (UmaiPixel)

Getting started

First Script

Version 1.0

extends KinematicBody2D
 
var velocity = Vector2()
 
func _physics_process(delta):
	if Input.is_action_pressed(„ui_right“):
		velocity.x = 30
 
	move_and_slide(velocity)

Version 1.1

extends KinematicBody2D
 
var velocity = Vector2()
 
func _physics_process(delta):
	if Input.is_action_pressed(„ui_right“):
		velocity.x = 30
	elif Input.is_action_pressed(„ui_left“):
		velocity.x = -30
	else:
		velocity.x = 0
 
	move_and_slide(velocity)

Version 1.2 - links, rechts, stop

extends KinematicBody2D
 
var velocity = Vector2()
 
func _physics_process(delta):
	if Input.is_action_pressed(„ui_right“):
		velocity.x = 30
	elif Input.is_action_pressed(„ui_left“):
		velocity.x = -30
	else:
		velocity.x = 0
 
	move_and_slide(velocity)

Version 1.3 - alle Richtungen

extends KinematicBody2D
 
var velocity = Vector2()
 
func _physics_process(delta):
	if Input.is_action_pressed(„ui_right“):
		velocity.x = 30
	elif Input.is_action_pressed(„ui_left“):
		velocity.x = -30
	else:
		velocity.x = 0
 
	if Input.is_action_pressed(„ui_up“):
		velocity.y = -30
	elif Input.is_action_pressed(„ui_down“):
		velocity.y = 30
	else:
		velocity.y = 0
 
	move_and_slide(velocity)

Jumping and gravity


Version 2.0 - Gravitation und Springen

extends KinematicBody2D
 
const SPEED = 60
const GRAVITY = 10
const JUMP_POWER = -250
const UP_DIR = Vector2(0, -1)
 
var velocity = Vector2()
 
func _physics_process(delta):
	if Input.is_action_pressed(„ui_right“):
		velocity.x = SPEED
	elif Input.is_action_pressed(„ui_left“):
		velocity.x = -SPEED
	else:
		velocity.x = 0
 
	if Input.is_action_pressed(„ui_up“):
		velocity.y = JUMP_POWER
 
	# velocity.y = velocity.y + GRAVITY
	velocity.y += GRAVITY
 
	velocity = move_and_slide(velocity, UP_DIR)

Version 2.1 - jump on ground

extends KinematicBody2D
 
const SPEED = 60
const GRAVITY = 10
const JUMP_POWER = -250
const UP_DIR = Vector2(0, -1)
 
var velocity = Vector2()
var on_ground = false
 
func _physics_process(delta):
	if Input.is_action_pressed(„ui_right“):
		velocity.x = SPEED
	elif Input.is_action_pressed(„ui_left“):
		velocity.x = -SPEED
	else:
		velocity.x = 0
 
	if Input.is_action_pressed(„ui_up“):
		if on_ground == true:
			velocity.y = JUMP_POWER
			on_ground = false
 
	# velocity.y = velocity.y + GRAVITY
	velocity.y += GRAVITY
 
	if is_on_floor():
		on_ground = true
	else:
		on_ground = false
 
	velocity = move_and_slide(velocity, UP_DIR)

Tilsets and Tilemaps

Character animation

extends KinematicBody2D
 
const SPEED = 60
const GRAVITY = 10
const JUMP_POWER = -250
const UP_DIR = Vector2(0, -1)
 
var velocity = Vector2()
var on_ground = false
 
func _physics_process(delta):
	if Input.is_action_pressed(„ui_right“):
		velocity.x = SPEED
		$AnimatedSprite.play(„run “)
		$AnimatedSprite.flip_h = false
	elif Input.is_action_pressed(„ui_left“):
		velocity.x = -SPEED
		$AnimatedSprite.play(„run “)
		$AnimatedSprite.flip_h = true
	else:
		velocity.x = 0
		if on_ground:
			$AnimatedSprite.play(„idle“)
 
	if Input.is_action_pressed(„ui_up“):
		if on_ground == true:
			velocity.y = JUMP_POWER
			on_ground = false
			$AnimatedSprite.play(„jump“)
 
	# velocity.y = velocity.y + GRAVITY
	velocity.y += GRAVITY
 
	if is_on_floor():
		on_ground = true
	else:
		on_ground = false
		if velocity.y < 0:
			$AnimatedSprite.play(„jump“)
		else:
			$AnimatedSprite.play(„fall“)
 
	velocity = move_and_slide(velocity, UP_DIR)

Fireball alright!

Fireball alright and left