INHOUDSOPGAWE:

Diviértete Con ArduPack (Videojuego2D Godot3 + Arduino ESP32): 8 stappe
Diviértete Con ArduPack (Videojuego2D Godot3 + Arduino ESP32): 8 stappe

Video: Diviértete Con ArduPack (Videojuego2D Godot3 + Arduino ESP32): 8 stappe

Video: Diviértete Con ArduPack (Videojuego2D Godot3 + Arduino ESP32): 8 stappe
Video: Топ 10 лучших игр SEGA [Mega Drive, Genesis] 2024, Julie
Anonim
Diviértete Con ArduPack (Videojuego2D Godot3 + Arduino ESP32)
Diviértete Con ArduPack (Videojuego2D Godot3 + Arduino ESP32)

Modelle vir videoprogramme wat ons toelaat om die gebruik van funksies en funksies vir ons programme te verlig, sowel as om programme te deel met die funksie van sagteware vir ons en ons kan nie ArduPack gebruik nie.

-Juan Camilo Guzmán-Sebastián Carmona-Juan Diego Bustamante-Jhonatan Rodriguez

Voorrade

WEMOS LOLIN 32.

Dos sensores HC SR 04.

Pantalla LED 1920x1080, 24, 24MK430H.

Altavoces 2.2W, 3, 5 mm, logitech S120.

Arduino IDE (Para el funcionamiento del control)

Piskel (Para los sprites y personajes). Godot (Para la programación del Vídeo Juego).

Librerias: pySerial (vir die programmatuur van die ESP32 -programmatuur) NewPing_v1.9.1 (vir die leer van die sensore) blekeyboard (vir die komende programme vir video -simulasies en tegnologie)

Stap 1: Video -oorsig Y spelontwerpdokument

Image
Image

En esta sección mostramos la razón de ser de el proyecto y su Game Design Document

Stap 2: Montaje Del Circuito

Subir Código Del Funcionamiento Al Arduino
Subir Código Del Funcionamiento Al Arduino

Ons kan ook hierdie sensore a la placa Wemos Lolin32 gebruik om 'n prentjie te gebruik: 5v en die GND vir die alimentasie, die sensor van die pinne, die echo en die sneller, en dit kan ook 'n aantal spesiale funksies word usamos en el código, die esta manera se lograra la detección de los movimientos de la mano para mover al personaje y el ángulo del disparo.

Stap 3: Onderwerp die funksie van Al Arduino

Subir Código Del Funcionamiento Al Arduino
Subir Código Del Funcionamiento Al Arduino

Primero debemos añadir las librerías necesarias, al descargarlas deberemos ir al Arduino IDE y en Sketch, include library, add. Zip Library.. buscamos and agregamos la librerías proporcionadas.

NewPing

BleKeyboard

Para poder usar correctamente la placa con arduino IDE usaremos pyserial.

-Primero, aflaai Python, aflaai van 'n PIP -argief, 'n unieke Python -program en 'n kommando kry vir pyp.py, posteriormente en 'n konsole nuut van Python om 'n kommando te beskryf: Python -m pip install pyserial, si todo funcionado correctamente ya podremos usar la placa con Arduino IDE

Ons kan die funksies van die beheerfunksies in ag neem, sowel as die argiefkontroller.ino.

Eerstens kan u die waardevolle sensore van die nabygeleë, die biblioteek se BleKeyboard vir dieselfde simulasie van arriba, abajo, izquierda en derecha

Stap 4: Creación De Sprites Y Personajes

Creación De Sprites Y Personajes
Creación De Sprites Y Personajes
Creación De Sprites Y Personajes
Creación De Sprites Y Personajes
Creación De Sprites Y Personajes
Creación De Sprites Y Personajes

Deberemos usar un creador de sprites libre para poder crear propios personajes, objetos, enemigos etc.

Ons kan die creador piskel gebruik (https://www.piskelapp.com) vir die beheer van die persone, die beheerder kan die redakteur toelaat om foto's van png's te verwerk (Para permir transparencia).

Stap 5: Importar Los Sprites 'n Godot Engine Para La Implementacion Del Vídeo Juego

Importar Los Sprites 'n Godot Engine Para La Implementacion Del Vídeo Juego
Importar Los Sprites 'n Godot Engine Para La Implementacion Del Vídeo Juego
Importar Los Sprites 'n Godot Engine Para La Implementacion Del Vídeo Juego
Importar Los Sprites 'n Godot Engine Para La Implementacion Del Vídeo Juego

U kan die oorspronklike weergawes van 'n video vir 'n poder gebruik. Para importar los sprites al juego, añadimos un nodo de sprite y en sus propiedades elegimos como textura la imagen-p.webp

Stap 6: Beskikking van die los elemente en pantalla Y Configuración del Proyecto

Disposición De Los Elementos En Pantalla Y Configuración Del Proyecto
Disposición De Los Elementos En Pantalla Y Configuración Del Proyecto

Die esta manera is een van die elemente wat ons vir die video kan registreer, maar ook vir 'n knoppie of 'n otro (Como el caso del jugador con su sprite y collider más su brazo).

Nota: Algunas configuraciones de los nodos son necesarios para el correcto funcionamiento, como verificar que los nodos tienen conectados correct eventes (En este caso los eventos que implican a la bala, el enemigo y al jugador), Asignarle los grupos correspondientes a los nodos: Jugador en Enemigo kan 'n groep met 'n ander nommer en 'n LimiteBalas van 'n groot skerm opstel, 'n konfigurasie van die tamas en 'n proyecto> ajustes de proyecto> 'n eenheid van 1600x600 as 'n ander beeld van 'n poder kan ons 'n korrekte toetsing gee, maar ons kan ook die funksies van 'n persoon verdeel en 'n uiteensetting van 'n persoon in 'n la ventana gee. por defecto tenemos las flechas (Arriba y abajo para altura y izquierda y derecha para el angulo).

Stap 7: Creación De Los Scripts

Creación De Los Scripts
Creación De Los Scripts
Creación De Los Scripts
Creación De Los Scripts
Creación De Los Scripts
Creación De Los Scripts

Daar is verskillende skripte vir bewegende persone, voorwerpe, skripte vir afwykings, opnames, afskrywings, oudio's en deteksies vir die einde van die dag. 'N Goeie enjin kan die programmeerbare skripte van die programme vir ons gebruik.

'N Vervolg van die instansies van die scripts van die volgende maniere:

"nombreScript.cs (NombreNodo) -> beskrywing"

Vir 'n skripsie of 'n knoppie, klik hier om 'n enkele klik of 'n enkele knoppie te gee, 'n nuwe naam en 'n langskrif vir die teks.

Scripts para el control del nivel: infinite_bg.cs (Level1) -> El movimiento infinito del fondo, calcular pointaje y determinar cuando pierde.

met behulp van Godot, met behulp van System;

openbare klas infinite_bg: Node

{openbare dubbele punt = 0; openbare bool vivo = waar; private Sprite agtergronde = nuwe Sprite [5]; private vlot bg_width = 1598f; private float move_speed = 400f; private vlot min_X = -1300f; // Gebel wanneer die knoop vir die eerste keer die toneelboom binnegaan. openbare override void _Ready () {for (int i = 1; i <6; i ++) {backgrounds [i-1] = GetNode ("Background"+i); }}

// Elke raam genoem. 'delta' is die tyd wat verloop het sedert die vorige raam.

openbare override void _Process (float delta) {for (int i = 0; i <backgrounds. Length; i ++) {Vector2 temp = backgrounds . GetPosition (); temp.x -= move_speed * delta; as (temp.x <= min_X) {temp.x += bg_width * agtergronde. Lengte; } agtergronde . SetPosition (temp); } as (vivo) {puntaje += 0,01; Area2D BotonReinicio = GetNode ("BotonReinicio"); Vector2 escala = nuwe Vector2 (0, 0); BotonReinicio. Scale = escala; Etiket Puntaje = GetNode ("CanvasLayer/puntaje"); Puntaje. Text = Math. Round (puntaje, 0). ToString (); } anders {Area2D BotonReinicio = GetNode ("BotonReinicio"); Vector2 escala = nuwe Vector2 (1, 1); BotonReinicio. Scale = escala; }

}

}

Reinicio: botonReinicio.gd (botonReinicio) -> Beheer van die funksionele funksie van 'n werknemer.

brei Area2D uit

func _on_Area2D_input_event (viewport, event, shape_idx):

as gebeurtenis InputEventMouseButton is: as event.is_pressed (): get_tree (). reload_current_scene ()

Jugador: jugador.gd (Jugador) -> Beheer van die film.

brei KinematicBody2D uit

var beweging = Vector2 ()

func _ready ():

druk (self.get_path ()); func _physics_process (delta): if (position.y = 570): motion.y = -150 else: if (Input.is_action_pressed ("ui_up")): motion.y += -20 else: if (Input.is_action_pressed ("ui_down"))): motion.y+= 20 beweging = move_and_slide (beweging)

Disparo: Disparo_ Brazo.gd (Brazo) -> controla el angulo del arma and instancia un nuevo disparo cada cierto tiempo

brei Area2D uit

var bala = preload ("res: //Escena/bala.tscn");

var disparo = waar; uitvoer var velocidad = 1000; uitvoer var verhouding = 0,4;

# Elke raam genoem. 'delta' is die tyd wat verloop het sedert die vorige raam.

func _process (delta): as rotation_degrees> -40: if Input.is_action_pressed ("ui_left"): rotation_degrees += -5 if rotation_degrees <45: if Input.is_action_pressed ("ui_right"): rotation_degrees += 5 if (disparo): var bala_creada = bala.instance (); bala_creada.position = get_global_position (); bala_creada.rotation_degrees = rotasie_grade; bala_creada.apply_impulse (Vector2 (), Vector2 (velocidad, 0).rotated (rotation)) get_tree (). get_root (). add_child (bala_creada); disparo = vals; opbrengs (get_tree (). create_timer (verhouding), "time -out") disparo = true;

Colisiones: enemigo.gd (Enemigo) y bala.gd (Bala) -> verificar y actuar ante una colisión (Enemigo y bala) (Enemigo y jugador).

brei KinematicBody2D uit

#Bepaal die snelheid van vyandigheid

var velocidad = -500; func _process (delta): move_and_slide (Vector2 (velocidad, 0)) slaag

func _on_Area2D_body_entered (liggaam):

as body.is_in_group ("Jugador"): body.queue_free (); get_node ("/root/Level1"). vivo = vals; as body.is_in_group ("skerm"): queue_free ();

brei RigidBody2D uit

#

func _on_Bala_body_entered (liggaam):

as body.is_in_group ("Enemigo"): body.queue_free (); queue_free (); get_node ("/root/Level1"). puntaje += 5; as body.is_in_group ("skerm"): queue_free ();

Vyande: EnemySpawner.gd (EnemySpawner)-> aparición aleatoria de enemigos.

brei Node uit

var vyand = voorlaai ("res: //Escena/Enemigo.tscn");

var aparicion = 0,8; export var aparecer = true;

funksieproses (delta):

if (aparecer): spawn () aparecer = false; opbrengs (get_tree (). create_timer (aparicion), "time -out") aparecer = true; func spawn (): var enemigo = vyand.instansie (); var pos = Vector2 (); pos.x = 1632; pos.y = rand_reeks (32, 592); enemigo.set_posisie (pos); get_node ("houer"). add_child (enemigo)

Los nodos Enemigo y bala is encuentran en dos escenas onafhanklike, wat toman su mismo nombre, bala.tscn y enemigo.tscn.

Git con video speel:

github.com/jcamiloguzman/ArduPack

Stap 8: Integrasie (Control + Videojuego)

Integrasie (Control + Videojuego)
Integrasie (Control + Videojuego)
Integrasie (Control + Videojuego)
Integrasie (Control + Videojuego)
Integrasie (Control + Videojuego)
Integrasie (Control + Videojuego)

U kan ook die funksionele funksies van die nuutste videobestuur en die nuestro -beheer in ag neem, maar dit kan ook 'n soortgelyke integrasie van beheer wees. nuestra computadora, para ello debemos conectar el circuito con el código y los sensores montados y funcionando y nuestro juego ejecutándose, en el momento de encender el control, estará buscando un emparejamiento vía Bluetooth, lo que haremos será emparejar y conectarlo con nurarra comput al juego, as todo ha funcionado correctamente se podría disfrutar de ArduPack con su control no convencional.

Daar is ook 'n nuut beskikbare Bluetooth en buskamera's met 'n ESP32 BLE -sleutelbord, wat 'n ander elektroniese en elektroniese sleutelbord kan kies.

'N Juffrou!

Aanbeveel: