Índice:

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

Modelo Prototipo de um VideoJuego que permite que o usuario divertirse usando um controle nao convencional y para os mais entusiastas da programacao darles um ponto de partida com a facilidad de los elementos software libres en los que fue desarrollado ArduPack.

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

Suprimentos

WEMOS LOLIN 32.

Dos sensores HC SR 04.

Pantalla LED 1920x1080, 24, 24MK430H.

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

Arduino IDE (para funções de controle)

Piskel (Para los sprites y personajes). Godot (Para a programação do Vídeo Juego).

Bibliotecas: pySerial (Para programar o firmware da placa ESP32) NewPing_v1.9.1 (para ler os dados dos sensores) blekeyboard (Para comunicar o arduino com o videojuego simulando um teclado)

Etapa 1: Documento de design do jogo de revisão de vídeo Y

Image
Image

Nesta seção, mostramos a razão de ser do projeto e seu documento de design do jogo

Etapa 2: Montaje Del Circuito

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

Veja deben conectar los dos sensores à placa Wemos Lolin32 como se aprecia na imagem: Utilizamos 5v e o GND para a alimentação, cada sensor posee dos pinheiros, um echo e um trigger, estos pueden ser cualesquiera pero en la imagen especificamos los que adicionado no código, esta manera se lograra a detecção dos movimentos da mano para mover a pessoa e o ángulo do disparo.

Etapa 3: Subir Código Del Funcionamiento 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, incluir biblioteca, adicionar. Zip Library.. buscamos y agregamos la librerías proporcionadas.

NewPing

BleKeyboard

Para poder usar corretamente la placa com arduino IDE usaremos pyserial.

-Primero, descargaremos Python, procederemos a descargar el archivo PIP, lo ubicaremos en una consola Python y escribiremos el comando get-pip.py, posteriormente en una consola nueva de Python escribiremos el: Python -m pip install pyserial, si todo ha funcionado corretamente e podremos usar a placa com Arduino IDE

Después subimos o código para as funções de controle, que se encuentra no arquivo controller.ino.

Este código permite ler os valores de sensores de proximidade, y depender de los valores de cada sensor, usa a biblioteca BleKeyboard para simular las pulsasiones de arriba, abajo, izquierda y derecha

Etapa 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.

Neste caso, se use o creador piskel (https://www.piskelapp.com) para a criação dos enemigos, o personaje controlable, este editor permite guardar os sprites como imagenes-p.webp

Etapa 5: Importar Los Sprites para 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

Debemos importar os sprites anteriormente criados para poder empezar a criação do videojuego. Para importar os sprites al juego, añadimos un nodo de sprite y en sus propiedades elegimos como textura la imagen-p.webp

Etapa 6: Disposición De Los Elementos 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

Esta manera se agrega a cada um dos elementos al entorno para desarrollar o videojuego, para agregar um nodo perteneciente a outro (Como o caso do jugador com seu sprite e colisor mais no Brasil) damos clique no nodo e damos clique no añadir hijo.

Nota: Algunas configuraciones de los nodos son necesarios para el correcto funcionamiento, como verificar que los nodos tienen conectado corretamente los eventos (En este caso los eventos que implican la bala, el enemigo y al jugador), Asignarle los grupos correspondientes a los nodos: Jugador y Enemigo tienen sus grupos con su mismo nombre y LimiteBalas tiene el grupo llamado Screen, configurar el tamaño de la ventana en Proyecto> ajustes de proyecto> ventana a un 1600x600, y tener en cuenta que algunos nodos deben tener los mismos nombres que se apreciado na imagem para poder ser acessado corretamente, também podemos definir os controles que se associarem à altura e o ângulo de disparo da pessoa na ventana Projeto> ajustes do projeto> mapas de entrada, podemos definir as teclas que queremos usar, por defecto tenemos las flechas (Arriba y abajo para altura y izquierda y derecha para el angulo).

Etapa 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

Tendremos que crear los scripts de movimento de personaje, enemigos, scripts de disparos, puntaje, enemigos derrotados, audio y la detección del fin del juego. Goodot engine te da possibilidade de programar estos scripts usando C # ou use su propio lenguaje. GD.

A continuación se muestran las instancias de todos los scripts de this manera:

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

Para agregar um script a um nodo, damos click derecho sobre él y damos clique em añadir nodo, escogemos nombre e lenguaje para o script.

Scripts para o controle do nível: infinite_bg.cs (Level1) -> O movimento infinito do fundo, calcular puntaje e determinar cuando pierde.

usando Godot; using System;

public class infinite_bg: Node

{puntaje duplo público = 0; público bool vivo = verdadeiro; Sprite privado fundos = novo Sprite [5]; float privado bg_width = 1598f; float privado move_speed = 400f; float privado min_X = -1300f; // Chamado quando o nó entra na árvore de cena pela primeira vez. public override void _Ready () {for (int i = 1; i <6; i ++) {backgrounds [i-1] = GetNode ("Background" + i); }}

// Chamado todos os quadros. 'delta' é o tempo decorrido desde o quadro anterior.

substituição pública 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; } fundos . SetPosition (temp); } se (vivo) {puntaje + = 0,01; Area2D BotonReinicio = GetNode ("BotonReinicio"); Vector2 escala = novo Vector2 (0, 0); BotonReinicio. Scale = escala; Label Puntaje = GetNode ("CanvasLayer / puntaje"); Puntaje. Text = Math. Round (puntaje, 0). ToString (); } else {Area2D BotonReinicio = GetNode ("BotonReinicio"); Vector2 escala = novo Vector2 (1, 1); BotonReinicio. Scale = escala; }

}

}

Reinicio: botonReinicio.gd (botonReinicio) -> Controlar el funcionamiento del botón para volver a empezar.

estende Area2D

func _on_Area2D_input_event (janela de visualização, evento, forma_idx):

se o evento é InputEventMouseButton: se event.is_pressed (): get_tree (). reload_current_scene ()

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

estende KinematicBody2D

var motion = Vector2 ()

func _ready ():

imprimir (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")): movimento.y + = 20 movimento = movimento_e_slide (movimento)

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

estende Area2D

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

var disparo = verdadeiro; export var velocidad = 1000; proporção da var de exportação = 0,4;

# Chamado todos os quadros. 'delta' é o tempo decorrido desde o quadro 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 (pop): var bala_creada = bala.instance (); bala_creada.position = get_global_position (); bala_creada.rotation_degrees = rotation_degrees; bala_creada.apply_impulse (Vector2 (), Vector2 (velocidad, 0).rotated (rotação)) get_tree (). get_root (). add_child (bala_creada); disparo = falso; yield (get_tree (). create_timer (ratio), "timeout") disparo = verdadeiro;

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

estende KinematicBody2D

#Determina la velocidad del enemigo

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

função _on_Area2D_body_entered (body):

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

estende RigidBody2D

#

função _on_Bala_body_entered (body):

se body.is_in_group ("Enemigo"): body.queue_free (); queue_free (); get_node ("/ root / Nível1"). puntaje + = 5; se body.is_in_group ("Tela"): queue_free ();

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

estende o Nó

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

var aparicion = 0,8; exportar var aparecer = verdadeiro;

func _process (delta):

if (aparecer): spawn () aparecer = false; yield (get_tree (). create_timer (aparicion), "timeout") aparecer = true; função spawn (): var enemigo = inimigo.instance (); var pos = Vector2 (); pos.x = 1632; pos.y = rand_range (32, 592); enemigo.set_position (pos); get_node ("container"). add_child (enemigo)

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

Git con video juego terminado:

github.com/jcamiloguzman/ArduPack

Etapa 8: Integração (Control + Videojuego)

Integración (Control + Videojuego)
Integración (Control + Videojuego)
Integración (Control + Videojuego)
Integración (Control + Videojuego)
Integración (Control + Videojuego)
Integración (Control + Videojuego)

Uma vez, tenemos o correcto funcionamiento de nuestro videojuego y de nuestro control, é hora de realizar a integração de los dos nuestra computadora, para ello debemos conectar o circuito com o código e os sensores montados y funcionando y nuestro juego ejecutándose, no momento de encender o controle, estar buscando um emparejamiento via Bluetooth, para que haremos emparejar ylo con nuestra computadora y entrar al juego, si todo ha funcionado se corretamente podría disfrutar de ArduPack con su control no convencional.

Agregamos um novo dispositivo Bluetooth e buscamos com o teclado ESP32 BLE, uma vez selecionado debería emparejarse e conectarse automáticamente.

A jugar!

Recomendado: