Taula de continguts:
- Subministraments
- Pas 1: revisió del vídeo Y Document de disseny de jocs
- Pas 2: Montatge Del Circuit
- Step 3: Subir Code Del Funcionament Al Arduino
- Pas 4: Creació De Sprites Y Personajes
- Step 5: Importar Los Sprites a Godot Engine Para La Implementacion Del Vídeo Juego
- Step 6: Disposició dels elements en pantalla i configuració del projecte
- Pas 7: Creació dels scripts
- Pas 8: Integració (Control + Videojoc)
Vídeo: Diviértete Con ArduPack (Videojuego2D Godot3 + Arduino ESP32): 8 Steps
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:11
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
En aquesta secció es mostren la raó del seu projecte i el seu Game Design Document
Pas 2: Montatge Del Circuit
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
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
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
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
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
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)
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:
Romeo: Una Placa De Control Arduino Para Robótica Con Driver Incluidos - Robot Seguidor De Luz: 26 Steps (with Pictures)
Romeo: Una Placa De Control Arduino Para Robótica Con Driver Incluidos - Robot Seguidor De Luz: Que tal amics, sigui amb les revisions de plaques i sensors, amb l’aportació de l’empresa DFRobot, avui veiem una placa amb prestacions molt interessants, i és ideal per al desenvolupament de prototips robòtics i el control de motors i serveis, d
Vídeo Tutorials De Tecnologías Creativas 01: Hello World! Blink, Hacemos Parpadear Nuestro Primer Led Con Arduino: 4 Steps
Vídeo Tutorials De Tecnologías Creativas 01: Hello World! Blink, Hacemos Parpadear Nuestro Primer Led Con Arduino: En este tutorial vamos a aprender como hacer parpadear (blink) un diodo LED amb una placa Arduino Uno. Aquest exercici es realitzarà mitjançant simulació i per utilitzar-lo mitjançant Tinkercad Circuits (utilitzant una compte gratuïta)
¡Mi Estación Meteorológica Con Arduino !: 6 Steps
¡Mi Estación Meteorológica Con Arduino !: Este tutorial tracta de ense ñ ar c ó mo se puede hacer una estaci ó n meteorol ó gica con un Arduino Uno, un BMP180 y un LCD, de una manera r á pida, sencilla y que en reality logre el prop ó site que es que el LCD mue
Gamepaduino (Mando Para Videjuegos Hecho Con Arduino): 10 Steps
Gamepaduino (Mando Para Videjuegos Hecho Con Arduino): En aquest petit ñ o projecte crearem un gamepad (control de videojocs), utilitzant un CircuitPlayground, encara que produeix í a utilitzar qualsevol placa que tingui un processador atmega32u4. Lo que hacemos es programar nuestra placa com
Introducció a ESP32 - Instal·lació de plaques ESP32 a Arduino IDE - ESP32 Blink Code: 3 passos
Introducció a ESP32 | Instal·lació de plaques ESP32 a Arduino IDE | ESP32 Blink Code: en aquest instructable veurem com començar a treballar amb esp32 i com instal·lar plaques esp32 a Arduino IDE i programarem esp 32 per executar codi blink amb arduino ide