Índice:
- Suprimentos
- Etapa 1: Documento de design do jogo de revisão de vídeo Y
- Etapa 2: Montaje Del Circuito
- Etapa 3: Subir Código Del Funcionamiento Al Arduino
- Etapa 4: Creación De Sprites Y Personajes
- Etapa 5: Importar Los Sprites para Godot Engine Para La Implementacion Del Vídeo Juego
- Etapa 6: Disposición De Los Elementos En Pantalla Y Configuración Del Proyecto
- Etapa 7: Creación De Los Scripts
- Etapa 8: Integração (Control + Videojuego)
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:35
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
Nesta seção, mostramos a razão de ser do projeto e seu documento de design do jogo
Etapa 2: Montaje Del Circuito
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
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
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
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
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
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)
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:
Como reparar o Arduino queimado ou ESP32: 5 etapas
Como reparar o Arduino ou ESP32 queimado: neste vídeo, você aprenderá como consertar o seu Arduino ou ESP32 queimado! Isso pode lhe trazer uma excelente receita financeira, com algo que você adora fazer. Usei duas novas ferramentas e elas eram uma estação de solda que não achei que funcionasse tão barato
Comunicação sem fio LoRa de 3 km a 8 km com dispositivo E32 (sx1278 / sx1276) de baixo custo para Arduino, Esp8266 ou Esp32: 15 etapas
LoRa 3Km a 8Km de comunicação sem fio com baixo custo E32 (sx1278 / sx1276) Dispositivo para Arduino, Esp8266 ou Esp32: Eu crio uma biblioteca para gerenciar EBYTE E32 baseada na série Semtech de dispositivos LoRa, um dispositivo muito poderoso, simples e barato. Você pode encontrar Versão de 3Km aqui, versão de 8Km aqui Eles podem trabalhar em uma distância de 3000m a 8000m, e têm muitos recursos e
Como enviar e-mails com anexos com Arduino, Esp32 e Esp8266: 6 etapas
Como enviar e-mails com anexos com Arduino, Esp32 e Esp8266: Aqui gostaria de explicar a versão 2 da minha biblioteca EMailSender, uma grande evolução em relação à versão 1, com suporte para Arduino com w5100, w5200 e w5500 ethernet shield e enc28J60 clone dispositivos e suporte para esp32 e esp8266.Agora você pode anunciar
Instalando a placa ESP32 no Arduino IDE (Windows, Mac OS X, Linux): 7 etapas
Instalando a placa ESP32 no IDE do Arduino (Windows, Mac OS X, Linux): há um complemento para o IDE do Arduino que permite programar o ESP32 usando o IDE do Arduino e sua linguagem de programação. Neste tutorial, mostraremos como instalar a placa ESP32 no IDE do Arduino se você estiver usando Windows, Mac OS X ou Li
Introdução ao ESP32 - Instalando placas ESP32 no IDE Arduino - Código ESP32 Blink: 3 etapas
Introdução ao ESP32 | Instalando placas ESP32 no IDE Arduino | ESP32 Blink Code: Neste instructables veremos como começar a trabalhar com esp32 e como instalar placas esp32 no IDE do Arduino e iremos programar esp 32 para executar o código blink usando arduino ide