Taula de continguts:

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

Vídeo: Diviértete Con ArduPack (Videojuego2D Godot3 + Arduino ESP32): 8 Steps

Vídeo: Diviértete Con ArduPack (Videojuego2D Godot3 + Arduino ESP32): 8 Steps
Vídeo: Топ 10 лучших игр SEGA [Mega Drive, Genesis] 2024, De novembre
Anonim
Diviértete Con ArduPack (Videojoc2D Godot3 + Arduino ESP32)
Diviértete Con ArduPack (Videojoc2D Godot3 + Arduino ESP32)

Model Prototype de un VideoJuego que permetrà a l'usuari divertir-se utilitzant un control no convencional i per als més entusiastes de la programació darles un punt de partida amb la facilitat dels elements programari lliures en el que va ser desenvolupat ArduPack.

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

Subministraments

WEMOS LOLIN 32.

Dos sensors HC SR 04.

Pantalla LED 1920x1080, 24, 24MK430H.

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

Arduino IDE (Per al funcionament del control)

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

Llibreries: pySerial (Per programar el firmware de la placa ESP32) NewPing_v1.9.1 (per llegir els dades dels sensors) blekeyboard (Per comunicar l’arduino amb el videojoc simulant un teclat)

Pas 1: revisió del vídeo Y Document de disseny de jocs

Image
Image

En aquesta secció es mostren la raó del seu projecte i el seu Game Design Document

Pas 2: Montatge Del Circuit

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

S'han de connectar els dos sensors a la placa Wemos Lolin32 com s'aprecia en la imatge: Utilitzem 5v i el GND per a l'alimentació, cada sensor posee dos pines, un eco i un trigger, aquests poden ser quins queden però en la imatge específicament els que usamos en el código, de esta manera se lograra la detección de los movimientos de la mano para mover al personaje y el ángulo del disparo.

Step 3: Subir Code Del Funcionament Al Arduino

Subir Codi Del Funcionament Al Arduino
Subir Codi Del Funcionament Al Arduino

Primer debem afegir les biblioteques necessàries, hauríem de descarregar-les a Arduino IDE i en Sketch, include library, add. Zip Library.. buscem i agregem les biblioteques proporcionades.

NewPing

BleKeyboard

Per poder utilitzar correctament la placa amb arduino IDE usaremos pyserial.

-Primero, descarregarem Python, procedirem a descarregar l'arxiu PIP, ubicarem en una consola Python i escriurem l'ordre get-pip.py, posteriorment en una consola nova de Python escriurem l'ordre: Python -m pip install pyserial, si tot ha funcionat correctament ja podem utilitzar la placa amb Arduino IDE

Després de submetre el codi per al funcionament del control, que es troba a l'arxiu controller.ino.

Aquest codi permet llegir els valors de dos sensors de proximitat, i depenent dels valors de cada sensor, usa la biblioteca BleKeyboard per simular les pulsacions de dalt, baix, esquerra i dreta

Pas 4: Creació De Sprites Y Personajes

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

Deberemos use un creador de sprites lliure per poder crear propis personatges, objectes, enemics etc.

En aquest cas s’utilitza el creador piskel (https://www.piskelapp.com) per a la creació dels enemics, el personatge controlable, aquest editor permet guardar els sprites com a imatges-p.webp

Step 5: Importar Los Sprites a Godot Engine Para La Implementacion Del Vídeo Juego

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

Debem importar els sprites anteriorment creats per poder començar la creació del videojoc. Per importar els sprites al joc, afegirem un node de sprite i en les seves propietats elegits com a textura la imatge-p.webp

Step 6: Disposició dels elements en pantalla i configuració del projecte

Disposició dels elements en pantalla i configuració del projecte
Disposició dels elements en pantalla i configuració del projecte

De aquesta manera es pacta cada un dels elements a l'entorn per desenvolupar el videojoc, per agregar un node perteneciente a un altre (Com el cas del jugador amb el seu sprite i col·lisionar més el seu brazo) donem clic en el node i donem clic en afegir fil.

Nota: Algunes configuracions dels nodes són necessaris per al correcte funcionament, com verificar que els nodes tenen connectats correctament els esdeveniments (En aquest cas els esdeveniments que impliquen a la bala, l’enemig i al jugador), Assignar els grups corresponents als nodes: Jugador i Enemigo tenen els seus grups amb el seu mateix nom i LimiteBalas té el grup anomenat Screen, configurar la mida de la ventana en Projecte> ajustos del projecte> ventana a un 1600x600, i tenir en compte que alguns nodes han de tenir els mismos noms que se aprecian en la imagen para poder ser accedidos correctamente, también podemos definir los controles que se asignan a la altura y ángulo de disparo del personaje en la ventana Proyecto> ajustos del proyecto> mapas de entrada, aquí podemos definir las teclas que queremos utilizar, per defecte tenim les fletxes (Arriba i baix per a altura i esquerra i dreta per a l’angle).

Pas 7: Creació dels scripts

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

Tendrem que crearem els scripts de moviment de personatge, enemics, scripts de disparos, puntaje, enemigos derrotados, audio y la detección del fin del juego. Goodot engine té la possibilitat de programar aquests scripts utilitzant C # o utilitzar el seu propi llenguatge. GD.

A continuació es mostren les instàncies de tots els scripts d'aquesta manera:

"nombreScript.cs (NombreNodo) -> descripció"

Per agregar un script a un node, donem clic dret sobre ell i donem clic a afegir node, escollim nombre i llenguatge per al script.

Scripts per al control del nivell: infinite_bg.cs (Level1) -> El moviment infinit del fons, puntular calcular i determinar quan s’aconsegueix.

utilitzant Godot, utilitzant System;

classe pública infinite_bg: Node

{doble puntaje públic = 0; public bool vivo = true; private Sprite fons = Sprite nou [5]; flotador privat bg_width = 1598f; flotador privat move_speed = 400f; flotador privat min_X = -1300f; // Es crida quan el node entra per primera vegada a l'arbre de l'escena. public override void _Ready () {for (int i = 1; i <6; i ++) {backgrounds [i-1] = GetNode ("Background" + i); }}

// Anomenat tots els fotogrames. 'delta' és el temps transcorregut des del marc anterior.

public override void _Process (float delta) {for (int i = 0; i <backgrounds. Length; i ++) {Vector2 temp = backgrounds . GetPosition (); temp.x - = move_speed * delta; if (temp.x <= min_X) {temp.x + = bg_width * backgrounds. Length; } fons . SetPosition (temp); } if (vivo) {puntaje + = 0,01; Area2D BotonReinicio = GetNode ("BotonReinicio"); Vector2 escala = new Vector2 (0, 0); BotonReinicio. Scale = escala; Etiqueta Puntaje = GetNode ("CanvasLayer / puntaje"); Puntaje. Text = Math. Round (puntaje, 0). ToString (); } else {Area2D BotonReinicio = GetNode ("BotonReinicio"); Vector2 escala = new Vector2 (1, 1); BotonReinicio. Scale = escala; }

}

}

Reinicio: botonReinicio.gd (botonReinicio) -> Controla el funcionament del botó per tornar a començar.

amplia Area2D

func _on_Area2D_input_event (finestra gràfica, esdeveniment, shape_idx):

si l'esdeveniment és InputEventMouseButton: si event.is_pressed (): get_tree (). reload_current_scene ()

Jugador: jugador.gd (Jugador) -> Controla el moviment del jugador.

amplia KinematicBody2D

var motion = Vector2 ()

func _ready ():

print (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 motion = move_and_slide (moviment)

Disparo: Disparo_ Brazo.gd (Brazo) -> controla l'angulo de l'arma i instància un nou disparo cada ciert temps

amplia Area2D

var bala = precàrrega ("res: //Escena/bala.tscn");

var disparo = true; export var velocitat = 1000; relació var export = 0,4;

# S'ha cridat a tots els fotogrames. 'delta' és el temps transcorregut des del marc anterior.

func _process (delta): if 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 = rotació_grados; bala_creada.apply_impulse (Vector2 (), Vector2 (velocitat, 0).rotated (rotació)) get_tree (). get_root (). add_child (bala_creada); disparo = fals; yield (get_tree (). create_timer (ratio), "timeout") disparo = true;

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

amplia KinematicBody2D

#Determina la velocitat de l'enemic

var velocitat = -500; func _process (delta): move_and_slide (Vector2 (velocitat, 0)) pass

func _on_Area2D_body_entered (body):

si body.is_in_group ("Jugador"): body.queue_free (); get_node ("/ root / Level1"). vivo = false; si body.is_in_group ("Pantalla"): queue_free ();

amplia RigidBody2D

#

func _on_Bala_body_entered (body):

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

Enemigos: EnemySpawner.gd (EnemySpawner) -> aparició aleatòria d'enemics.

amplia el node

var enemic = precàrrega ("res: //Escena/Enemigo.tscn");

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

func _process (delta):

if (aparecer): spawn () aparecer = false; yield (get_tree (). create_timer (aparicion), "timeout") aparecer = true; func spawn (): var enemigo = enemic.instància (); var pos = Vector2 (); pos.x = 1632; pos.y = rand_range (32, 592); enemigo.set_position (pos); get_node ("contenidor"). add_child (enemigo)

Los nodos Enemigo y bala se encuentran en dos escenas independientes, que tomán su mismo nombre, bala.tscn y enemigo.tscn.

Git with video game terminado:

github.com/jcamiloguzman/ArduPack

Pas 8: Integració (Control + Videojoc)

Integració (Control + Videojoc)
Integració (Control + Videojoc)
Integració (Control + Videojoc)
Integració (Control + Videojoc)
Integració (Control + Videojoc)
Integració (Control + Videojoc)

Una vegada tenim el correcte funcionament del nostre videojoc i del nostre control, és hora de realitzar la integració dels dos, aquest és el pas més fàcil gràcies a la forma en la qual està implementat el control, ja que va a simular el teclat de 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 via Bluetooth, lo que haremos será emparejar y conectarlo con nuestra computadora y entrar al joc, si tot ha funcionat correctament es podria gaudir d'ArduPack amb el seu control no convencional.

Agregem un nou dispositiu Bluetooth i busquem amb el nombre de teclat ESP32 BLE, una vegada seleccionat hauríem d’emparar-nos i connectar-nos automàticament.

A jugar!

Recomanat: