====== Godot 3 - Platformer Tutorial (UmaiPixel) ====== ===== Getting started ===== {{youtube>MMsMtPVUtUE?}} * Projekt erstellen{{ :tutorial:schnappschuss_070323_051912_pm.jpg?200|}} * Einstellungen (Project Settings) * Rendering | 2D | Use GPU Pixel Snap = on * Display | Window | Size (16:9) z.B. 320 x 180 * Test Width & Height = 1280 x 720 (vier mal Originalgröße) * Stretch Mode = 2d * Aspect = keep * erste Szene erstellen * Hauptszene erstellen (Node2D) und speichern * Playerszene erstellen * KinematicBody2D * Sprite\\ Sprite Reimport mit Preset 2D Pixel\\ Sprite Einstellungen für CharacterMap * [[https://opengameart.org/content/a-platformer-in-the-forest|Assets mit Beschreibung]] * CollisionsShape2D * Group Selected Nodes\\ {{ :tutorial:schnappschuss_070423_075207_am.jpg?400 |}} ==== 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 ===== {{youtube>xAXyHxxYPrQ?}}\\ 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 ===== * Sprite durch AnimatedSprite ersetzen * Animationen anlegen * fall, idle, jump jweils ein Bild, Speed = 0 FPS, Loop = false * run 5 Bilder * [[https://opengameart.org/content/a-platformer-in-the-forest|Assets mit Beschreibung]] 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 =====