תוכן עניינים:

Diviértete Con ArduPack (Videojuego2D Godot3 + Arduino ESP32): 8 שלבים
Diviértete Con ArduPack (Videojuego2D Godot3 + Arduino ESP32): 8 שלבים

וִידֵאוֹ: Diviértete Con ArduPack (Videojuego2D Godot3 + Arduino ESP32): 8 שלבים

וִידֵאוֹ: Diviértete Con ArduPack (Videojuego2D Godot3 + Arduino ESP32): 8 שלבים
וִידֵאוֹ: Топ 10 лучших игр SEGA [Mega Drive, Genesis] 2024, נוֹבֶמבֶּר
Anonim
Diviértete Con ArduPack (Videojuego2D Godot3 + Arduino ESP32)
Diviértete Con ArduPack (Videojuego2D Godot3 + Arduino ESP32)

דוגמאות לפרוטוקול וידיאו להפקת תוכנות להפקת תוכנות חופשיות וללא שליטה במספר תוכניות לאירועי תוכנה ולמחלקות התוכנה עם תוכנות חופשיות של תוכנות תוכנה בארהפוק.

-ג'ואן קמילו גוזמן-סבסטיאן כרמונה-חואן דייגו בסטמנטה-ג'ונאטאן רודריגס

אספקה

WEMOS LOLIN 32.

Dos sensores HC SR 04.

Pantalla LED 1920x1080, 24, 24MK430H.

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

Arduino IDE (Para el funcionamiento del control)

פישל (Para los sprites y personajes). גודו (פארה לה תוכנה דל וידיאו ג'וגו).

Librerias: pySerial (עבור תוכנת הקושחה של ESP32) NewPing_v1.9.1 (para leer los datos de los sensores) blekeyboard (עבור התקשורת של ארדואינו עם סרטוני סימולוציה וטכנולוגיה)

שלב 1: סקירת וידאו Y מסמך עיצוב משחקים

Image
Image

En esta sección mostramos la razón de ser de el proyecto y su משחק עיצוב מסמך

שלב 2: Montaje Del Circuito

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

Se deben conectar los dos sensores a la placa Wemos Lolin32 como se aprecia en la imagen: Utilizamos 5v y el GND para la alimentación, cada sensor posee dos pines, un echo y un trigger, estos pueden ser cualesquiera pero en la imagen especificamos los 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.

שלב 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, כולל ספרייה, הוסף. Zip Library.. buscamos y agregamos la librerías proporcionadas.

NewPing

BleKeyboard

עבור poder usar correctamente la placa con arduino IDE usaremos pyserial.

-Primero, descargaremos Python, procederemos a el 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 comando: Python -m pip install pyserial, si todo funcionado correctamente ya podremos usar la placa con Arduino IDE

מבזקים את כל הפעולות עבור שליטה בשליטה.

Este código permite leer los valores de dos sensores de proximidad, y dependiendo de los valores de cada sensor, usa la librería BleKeyboard for simular las pulsasiones de arriba, abajo, izquierda y derecha

שלב 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 וכו '.

En este caso se uso el creador piskel (https://www.piskelapp.com) para la creación de los enemigos, el personaje controlable, este e permitt guardar los sprites como imagenes-p.webp

שלב 5: Importar Los Sprites מנוע Godot עבור La Implementacion Del Vídeo Juego

Importar Los Sprites מנוע Godot Para La Implementacion Del Vídeo Juego
Importar Los Sprites מנוע Godot Para La Implementacion Del Vídeo Juego
Importar Los Sprites מנוע Godot Para La Implementacion Del Vídeo Juego
Importar Los Sprites מנוע Godot Para La Implementacion Del Vídeo Juego

Debemos importar los sprites anteriormente creados para poder empezar la creación del videojuego. עבור היבוא לוס ספריטס אל ג'וגו, אנהמימוס ונודו דה ספרייט ו en sus propiedades elegimos como textura la imagen-p.webp

שלב 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

De esta manera se accordgan cada uno de los elementos al entorno para desarrollar el videojuego, para agregar un nodo perteneciente a otro (Como el caso del jugador con su sprite y collider más su brazo) damos click en el nodo y damos click en añadir hijo.

הערה: Algunas configuraciones de los nodos son necesarios para el correcto funcionamiento, como verificar que los nodos tienen conectados correctamente los eventos (En este caso los eventos que implican a la bala, el enemigo y al jugador), Asignarle los grupos correspondentses 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 and cuenta que algunos nodos deben tener los misos nombres 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> ajustes del proyecto> mapas de entrada, aquí podemos definir las teclas que quaremos utiliz por defecto tenemos las flechas (Arriba y abajo para altura y izquierda y derecha para el angulo).

שלב 7: סקריפטים של Creación De Los

סקריפטים של קריאשן דה לוס
סקריפטים של קריאשן דה לוס
סקריפטים של קריאשן דה לוס
סקריפטים של קריאשן דה לוס
סקריפטים של קריאשן דה לוס
סקריפטים של קריאשן דה לוס

כתבות שונות של תסריטים, סרטים, תסריטים שונים, נקודות, תוכניות אודיו, והגדרות שונות של משחקים. מנוע Goodot יכול להכין את התסריטים התוכנתיים של usando C# o usar su propio lenguaje. GD.

המשך המסקנות של התכנים והסקריפטים של אסטה מנרה:

"nombreScript.cs (NombreNodo) -> תיאור"

עבור סקריפט אחד של התסריט, אפשר ללחוץ על הסמל הזה וללחוץ על הסמל.

סקריפטים עבור שליטה ברמה: infinite_bg.cs (רמה 1) -> מידע על אינפיניטו של פונדו, נקודה מחשבנית וקבועה פירוד.

שימוש ב- Godot; שימוש ב- System;

מעמד ציבורי infinite_bg: צומת

{puntaje ציבורי כפול = 0; ציבור בול vivo = נכון; רקע פרטי של Sprite = ספרייט חדש [5]; מצוף פרטי bg_width = 1598f; צף פרטי move_speed = 400f; מצוף פרטי min_X = -1300f; // מתקשר כאשר הצומת נכנס לראשונה לעץ הסצנה. לדחות את הציבור חלל _Ready () {for (int i = 1; i <6; i ++) {backgrounds [i-1] = GetNode ("רקע"+i); }}

// התקשר לכל פריים. 'דלתא' היא הזמן שחלף מאז המסגרת הקודמת.

הציבור עוקף את החלל _Process (float delta) {for (int i = 0; i <backgrounds. Length; i ++) {Vector2 temp = backgrounds . GetPosition (); temp.x -= מהירות מהירות * דלתא; אם (temp.x <= min_X) {temp.x += bg_width * רקעים.אורך; } רקעים . SetPosition (טמפ '); } אם (vivo) {puntaje += 0.01; Area2D BotonReinicio = GetNode ("BotonReinicio"); וקטור 2 escala = וקטור 2 חדש (0, 0); BotonReinicio. Scale = escala; תווית Puntaje = GetNode ("CanvasLayer/puntaje"); Puntaje. Text = Math. Round (puntaje, 0). ToString (); } else {Area2D BotonReinicio = GetNode ("BotonReinicio"); וקטור 2 אסקלה = וקטור 2 חדש (1, 1); BotonReinicio. Scale = escala; }

}

}

Reinicio: botonReinicio.gd (botonReinicio) -> Controla el funcionamiento del botón עבור volver a empezar.

מרחיב את שטח 2D

func _on_Area2D_input_event (viewport, event, shape_idx):

אם האירוע הוא InputEventMouseButton: אם event.is_pressed (): get_tree (). reload_current_scene ()

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

מרחיב את KinematicBody2D

var motion = Vector2 ()

func _ready ():

הדפס (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 (תנועה)

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

מרחיב את שטח 2D

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

var disparo = נכון; יצוא var velocidad = 1000; יחס var לייצא = 0.4;

# התקשר לכל מסגרת. 'דלתא' היא הזמן שחלף מאז המסגרת הקודמת.

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 = rotation_degrees; bala_creada.apply_impulse (Vector2 (), Vector2 (velocidad, 0).rotated (סיבוב)) get_tree (). get_root (). add_child (bala_creada); דיספרו = שקר; תשואה (get_tree (). create_timer (יחס), "פסק זמן") disparo = true;

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

מרחיב את KinematicBody2D

#דטרמינה la velocidad del enemigo

var velocidad = -500; func_process (delta): move_and_slide (Vector2 (velocidad, 0)) עובר

func _on_Area2D_body_entered (גוף):

אם body.is_in_group ("Jugador"): body.queue_free (); get_node ("/root/Level1"). vivo = false; אם body.is_in_group ("מסך"): queue_free ();

מרחיב את RigidBody2D

#

func _on_Bala_body_entered (גוף):

אם body.is_in_group ("Enemigo"): body.queue_free (); queue_free (); get_node ("/root/Level1"). נקודה += 5; אם body.is_in_group ("מסך"): queue_free ();

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

מאריך את הצומת

var אויב = טעינה מוקדמת ("res: //Escena/Enemigo.tscn");

var aparicion = 0.8; ייצוא var aparecer = true;

func _process (delta):

if (aparecer): spawn () aparecer = false; תשואה (get_tree (). create_timer (aparicion), "timeout") aparecer = true; func spawn (): var enemigo = אויב.הקרה (); var pos = Vector2 (); pos.x = 1632; pos.y = rand_range (32, 592); enemigo.set_position (pos); get_node ("מיכל"). 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 סרטון משחקים:

github.com/jcamiloguzman/ArduPack

שלב 8: אינטגרציה (Control + Videojuego)

אינטגרציה (Control + Videojuego)
אינטגרציה (Control + Videojuego)
אינטגרציה (Control + Videojuego)
אינטגרציה (Control + Videojuego)
אינטגרציה (Control + Videojuego)
אינטגרציה (Control + Videojuego)

Una vez tenemos el correcto funcionamiento de nuestro videojuego y de nuestro control, es hora de realizar la integración de los dos, este es el paso más fácil gracias a la forma en la que está implementado el control, ya que va a simular el teclado de nuestra computadora, para ello debemos conectar el circuito con el código y los sensores montados y funcionando y nuestro juego ejecutandose, en el momento de encender el control, estará buscando un emparejamiento vía Bluetooth, lo que haremos será emparejar y conectarlo con yrarra computer al juego, si todo ha funcionado correctamente se podría disfrutar de ArduPack con su control no convencional.

מכשירי Bluetooth ומכשירי Bluetooth הכוללים את כל המקלדות ESP32 BLE, ומציעים בחירה עצמית ואוטומטית.

ג'וגר!

מוּמלָץ: