Pong-Tutorial (Godot)

Aus Makerspace Wiki
Zur Navigation springen Zur Suche springen

Tutorials

Basic Breakout by HeartBeast

Basic Breakout - Teil1

Basic Breakout - Part 1

Basisszene erstellen

Node2D erstellen und umbenennen

Paddle erstellen (KinematicBody)

Sprite, CollisionShape2D, Größe einstellen - Scale (2,2), Bildschirm (640, 360)

Ball erstellen (PhysicsBody)

  • Sprite, Größe einstellen - Scale (4,4), CollisionShape2D
  • Mode: Charakter, Linear Velocity: (200, -200), Damp:0, Physical Material: Friction:0, Bounce: 1
  • Contacts Monitoring anschalten
  • Contacts Report auf "1" setzten

Wände erstellen (StaticBody)

  • CollisionPoligon2D

Basic Breakout - Part 2

Basic Breakout - Part 2

Script für Paddle

extends KinematicBody2D

# Variables und Konstanten
# var a = 2
# var b = "textvar"

func _ready():
	# Called when the node is added to the scene for the first time.
	# Initialization here
	pass

func _process(delta):
#	# Called every frame. Delta is time since last frame.
	# Der Paddle soll der Maus folgern
	var y = get_position().y
	var mouse_x = get_viewport().get_mouse_position().x
	set_position(Vector2(mouse_x, y))

Bricks einbauen (StaticBody2D)

  • Node2D als Sammelnade >> Bricks
  • Brick-Node StaticBody2D, Sprite, CollisionShape2D

Bricks zerstören

  • Contacts Monitoring anschalten
  • Contacts Report auf "1" setzten
  • Bricks zur Gruppe "Bricks" hinzufügen
  • Script in Ball-Node anlegen
extends RigidBody2D

func _process(delta):
#	# Called every frame. Delta is time since last frame.
#	# Update game logic here.
	var bodies = get_colliding_bodies()
	# Achtung Contact Montor anschalten und Contacts Report auf 1
	
	for body in bodies:
		if body.is_in_group("Bricks"):
			body.queue_free()

Basic Breakout - Part 3

Basic Breakout - Part 3
  • Position2D-Node zum Paddle hinzufügen und auf Position (0, 32) verschieben
extends RigidBody2D

# Hier kommen die scriptweiten Variablen und Konstanten hin
const SPEEDUP = 4         # ist eine Konstante
const MAXSPEED = 300
# var b = "textvar" ist eine Variable

func _ready():
	# Called when the node is added to the scene for the first time.
	# Initialization here
	pass

func _process(delta):
#	# Called every frame. Delta is time since last frame.
#	# Update game logic here.
	var bodies = get_colliding_bodies() # lokale Variable
	# Achtung Contact Monitor anschalten und Contacts Report auf 1
	
	for body in bodies:
		if body.is_in_group("Bricks"):
			body.queue_free()
		if body.get_name() == "Paddle":
			var speed = get_linear_velocity().length()
			var direction = get_position() - body.get_node("Ancor").get_global_position()
			var velocity = direction.normalized() * min (speed+SPEEDUP, MAXSPEED)
			set_linear_velocity(velocity)
			
	if get_position().y > get_viewport_rect().end.y:
		#print("Ball zerstört")
		queue_free()
gutes Video zur Vektor-Mathematik
  • Ball zu eigener Szene machen
  • Bricks zu eigener Szene machen

Basic Breakout - Part 4

Basic Breakout - Part 4: Punkte, etc.
  • Label hinzufügen
  • Script in World-Node
extends Node2D

var score = 0

func set_score(new_score):
	score += new_score 
	get_node("Punkte").set_text("Punkte: " + str(score))
  • Ansprechen in Ball-Script
if body.is_in_group("Bricks"):
			get_node("/root/World").set_score(10)
			body.queue_free()

Basic Breakout - Next Level