İçindekiler:

Diviértete Con ArduPack (Videojuego2D Godot3 + Arduino ESP32): 8 Adım
Diviértete Con ArduPack (Videojuego2D Godot3 + Arduino ESP32): 8 Adım

Video: Diviértete Con ArduPack (Videojuego2D Godot3 + Arduino ESP32): 8 Adım

Video: Diviértete Con ArduPack (Videojuego2D Godot3 + Arduino ESP32): 8 Adım
Video: Топ 10 лучших игр SEGA [Mega Drive, Genesis] 2024, Temmuz
Anonim
Diviértete Con ArduPack (Videojuego2D Godot3 + Arduino ESP32)
Diviértete Con ArduPack (Videojuego2D Godot3 + Arduino ESP32)

Modelo Prototipo de un VideoJuego que le izinirá al usuario başkaldırmak usand un kontrolü hiçbir konvansiyonel ve para los mas entusiastas de la programa cıvıl cıvıl cıvıl cıvıl cıvıl cıvıl cıvıl cıvıl cıvıl cıvıl cıvıl cıvıl cıvıl cıvıl.

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

Gereçler

WEMOS LOLIN32.

Dos sensörleri HC SR 04.

Pantalla LED 1920x1080, 24, 24MK430H.

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

Arduino IDE (Para el funcionamiento del control)

Piskel (Para los sprites ve personajes). Godot (Para la programación del Vídeo Juego).

Kitaplıklar:pySerial (ESP32 için yazılım ve donanım yazılımı para birimi)NewPing_v1.9.1 (sensörlerin kayıp verileriyle uyumlu)blekeyboard (Para comunicar el arduino con el videojuego simulando un teclado)

Adım 1: Video İnceleme Y Oyun Tasarım Belgesi

Image
Image

Oyun Tasarım Belgesi

Adım 2: Montaje Del Circuito

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

En uygun sensörler ve sensörler Wemos Lolin32 en özel görüntüden yararlanır: Özel ve özel bir görüntüden yararlanır. Usamos en el código, en eski manera se lograra la detección de los movimientos de la mano para mover al personaje ve el ángulo del disparo.

Adım 3: Subir Código Del Funcionamiento Al Arduino

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

Arduino IDE ve Sketch, kütüphaneyi dahil et,. Zip Kütüphanesini ekle.. buscamos y agregamos la librerías proporcionadas.

YeniPing

BleKlavye

arduino IDE usaremos pyserial ile uyumludur.

-Primero, Python indir, arşivden PIP indir, Python ve escribiremos ve comando get-pip.py, Python escribiremos el comando'dan sonra: Python -m pip kurulumu ve pyserial, Arduino IDE için işlevsellik düzeltmesi

Después subimos el código para el funcionamiento del control, que se encuentra en el arşivo controller.ino.

Este código, en yakın algılayıcıların, yakınlıktaki algılayıcıların ve algılayıcıların, ABD'nin la librería'sının izin vermesine izin verir.

Adım 4: Creación De Sprites ve Personajes

Creación De Sprites ve Kişiler
Creación De Sprites ve Kişiler
Creación De Sprites ve Kişiler
Creación De Sprites ve Kişiler
Creación De Sprites ve Kişiler
Creación De Sprites ve Kişiler

Deberemos usar un creador de sprites libre para poder crear propios personajes, objetos, enemigos vb.

En este caso se uso el creador piskel (https://www.piskelapp.com) para la creación de los enemigos, kişisel olarak kontrol edilebilir, este editörü izinli guardar los sprites como imagenes-p.webp

Adım 5: Los Sprites a Godot Engine Para La Implementacion Del Vídeo Juego'yu İçe Aktarın

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'un en önemli özelliği, video oyunlarının en başında geliyor. Para importar los sprites al juego, añadimos un nodo de sprite ve en son propiedades elegimos como textura la imagen-p.webp

Adım 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

Tüm öğelerin bir araya gelmesiyle, tüm öğelerin entorno para desarrollar ve videojuego, para agregar un nodo perteneciente a otro (Como el caso del jugador con su sprite y çarpıştırıcısı más su brazo) tıklayın en el nodo y damos click en añadir.

Not: Algunas configuraciones de los nodos son necesarios para el Correcto funcionamiento, como doğrulayıcı que los nodos tienen conectados Correctamente los eventos (En este caso los eventos que implican a la bala, el enemigo y al jugador), Asigner no.: jugador y Enemigo tienen sus grupos con su mismo nombre y LimiteBalas tiene el grupo llamado Ekran, el tamaño de la ventana tr PROYECTO configurar> ajustes de proyecto> ventana bir un 1600x600 y tener en cuenta que algunos nodos deben tener los Mismos nombres que se aprecian en la imagen para poder ser accedidos Correctamente, también podemos definir los kontrolleri que se asignan a la altura ve langulo de disparo del personaje en la ventana Proyecto>ajustes del proyecto > definas de entrada, aquí remos pode por defecto tenemos las flechas (Arriba y abajo para altura y izquierda y derecha para el angulo).

Adım 7: Creación De Los Komut Dosyaları

Creación De Los Senaryoları
Creación De Los Senaryoları
Creación De Los Senaryoları
Creación De Los Senaryoları
Creación De Los Senaryoları
Creación De Los Senaryoları

Kişiselleştirme için komut dosyaları, enemigos, disparos senaryoları, puntaje, enemigos derrotados, sesli ve nihai algılama. Goodot motorunun sunduğu olanaklardan biri de programa dayalı komut dosyalarıdır.

Bir süreklilik se muestran las instancias de todos los scripts de esta manera:

"nombreScript.cs(NombreNodo) -> açıklama"

Birleştirilmiş bir komut dosyası bir un nodo, damos'u tıklayın, daha önce bir kez daha tıklayın, bir başka deyişle, escogemos nombre ve lenguaje para el yazısı.

Komut dosyası para el kontrol del nivel: sonsuz_bg.cs(Level1) -> El movimiento sonsuz fondo, hesap noktası ve belirleyici cuando pierde.

Godot kullanma;Sistem kullanma;

genel sınıf sonsuz_bg: Düğüm

{ genel çift puntaje = 0; public bool vivo = doğru; özel Sprite arka planları = yeni Sprite[5]; özel kayan nokta bg_width = 1598f; özel şamandıra move_speed = 400f; özel kayan nokta min_X = -1300f; // Düğüm sahne ağacına ilk kez girdiğinde çağrılır. public override void _Ready() { for(int i = 1; i < 6; i++){ backgrounds[i-1] = GetNode("Arka Plan" + i); } }

// Her çerçeve çağrılır. 'delta' bir önceki kareden bu yana geçen süredir.

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; } arka planlar. SetPosition(temp); } if(canlı){ puntaje += 0.01; Area2D BotonReinicio = GetNode ("BotonReinicio"); Vector2 yükseltme = new Vector2(0, 0); BotonReinicio. Scale = escala; Etiket Puntaje = GetNode("CanvasLayer/puntaje"); Puntaje. Text = Math. Round(puntaje, 0). ToString(); }else{ Area2D BotonReinicio = GetNode ("BotonReinicio"); Vector2 yükseltme = yeni Vector2(1, 1); BotonReinicio. Scale = escala; }

}

}

Reinicio: botonReinicio.gd(botonReinicio) -> Kontrol ve işlev kontrolü.

Area2D'yi genişletir

func _on_Area2D_input_event(görünüm alanı, olay, şekil_idx):

olay InputEventMouseButton ise: event.is_pressed() ise: get_tree().reload_current_scene()

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

KinematicBody2D'yi genişletir

var hareket = 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 hareket= move_and_slide(hareket)

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

Area2D'yi genişletir

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

var disparo = true; dışa aktarma var velocidad = 1000; ihracat var oranı = 0.4;

# Her kareyi çağırdı. 'delta' bir önceki kareden bu yana geçen süredir.

func _process(delta): eğer döndürme_dereceleri > -40: eğer Input.is_action_pressed("ui_left"): döndürme_dereceleri ise += -5 eğer döndürme_dereceleri < 45: Eğer Input.is_action_pressed("ui_right"): döndürme_dereceleri += 5 ise(disparo): var bala_creada = bala.instance(); bala_creada.position = get_global_position(); bala_creada.rotation_degrees = rotasyon_degrees; bala_creada.apply_impulse(Vector2(), Vector2(velocidad, 0).rotated(rotasyon)) get_tree().get_root().add_child(bala_creada); disparo = yanlış; verim(get_tree().create_timer(oran), "zaman aşımı") disparo = true;

Çarpışmalar: enemigo.gd (Enemigo)y bala.gd(Bala) -> doğrulayıcı y aktuar ante una colisión (Enemigo y bala) (Enemigo y jugador).

KinematicBody2D'yi genişletir

#Determina la velocidad del enemigo

var velocidad = -500; func _process(delta): move_and_slide(Vector2(velocidad, 0)) geçiş

func _on_Area2D_body_entered(gövde):

if body.is_in_group("Jugador"): body.queue_free(); get_node("/root/Level1").vivo = false; if body.is_in_group("Ekran"): tail_free();

RigidBody2D'yi genişletir

#

func _on_Bala_body_entered(body):

if body.is_in_group("Enemigo"): body.queue_free(); sıra_ücretsiz(); get_node("/root/Level1").puntaje += 5; if body.is_in_group("Ekran"): tail_free();

Düşmanlar: EnemySpawner.gd(EnemySpawner)-> düşman aleatoria de enemigos.

düğümü genişletir

var düşman = preload("res://Escena/Enemigo.tscn");

var aparicion = 0.8; export var aparecer = true;

işlev_işlemi(delta):

if(aparecer): spawn() aparecer = false; verim(get_tree().create_timer(aparicion), "zaman aşımı") aparecer = true; func spawn(): var enemigo = düşman.instance(); var konum = Vector2(); konum.x = 1632; konum.y = rand_range(32, 592); enemigo.set_position(konum); get_node("konteyner").add_child(enemigo)

Los nodos Enemigo ve bala se encuentran en dos escenas bağımsızlar, que toman su mismo nombre, bala.tscn ve enemigo.tscn.

Git con video oyun terminali:

github.com/jcamiloguzman/ArduPack

Adım 8: Entegrasyon (Kontrol + Videojuego)

Entegrasyon (Kontrol + Videojuego)
Entegrasyon (Kontrol + Videojuego)
Entegrasyon (Kontrol + Videojuego)
Entegrasyon (Kontrol + Videojuego)
Entegrasyon (Kontrol + Videojuego)
Entegrasyon (Kontrol + Videojuego)

Yeni işlevler için yeni yeni video kontrolü, yeni yeni kontrol, entegrasyonla bütünleşme, en basit şekilde gözden geçirme, basit bir şekilde kontrol etme, eş zamanlı kontrol Nuestra Computadora, para ello debemos conectar el devresi con el código ve los sensores montados ve işlev ve nuestro juego ejecutándose, en hızlı ve en iyi kontrol, estará buscando ve Bluetooth, bağımsız cihazlarla bağlantılı bağlantı Al juego, ve yapılacak işler, düzeltmeleri düzeltmeyi ve ArduPack'i kontrol etmeyi geleneksel olmayan bir şekilde kontrol eder.

ESP32 BLE klavyesi, Bluetooth'la ve otomatik olarak değiştirilemez.

Bir jugar!

Önerilen: