复古游戏机升级版:运动控制+高清液晶屏!

2024-10-31 13:00:23 来源: 大科技网 点击数:

在对便携式游戏操纵杆的改良过程中,我引入了一块1.8英寸的彩色LCD显示屏,用于展示动画效果,并配备了一块用于动作捕捉的加速度计模块。

在前一篇探讨复古游戏机开发的文章中,我详细介绍了这款设备具备的本地无线多人互动功能。接下来,本文将聚焦于如何利用1.8英寸彩色LCD显示屏提升动画效果,以及如何通过加速度计模块实现动作捕捉输入。

针对本次升级的硬件,我们将采用ESP8266平台,基于Arduino编写一款简单的格斗游戏。游戏中,屏幕两侧的玩家将展开对决,直至一方生命值归零。每位角色都将采用16位色彩进行动画展示,并且可以通过倾斜或晃动各自的操纵杆来控制。

在着手构建此项目之前,建议您回顾本系列文章的第一部分,其中涵盖了使用ESP-NOW进行无线通信的基础知识,MIDI文件的转换及背景音乐播放,游戏中的碰撞检测,以及如何将代码上传至ESP8266微控制器等要点。

电路设计与PCB布局

图1展示了我们改进后的复古游戏设备Eagle接线示意图。

带有LCD屏幕的复古游戏机电路示意图

1.png

图1. 带有LCD屏幕的复古游戏机电路示意图

由于预留了扩展空间,包括用于更大SPI显示屏和I2C传感器模块的引脚头,因此升级后的控制台PCB设计无需调整(图2)。然而,与我的其他项目一样,本次项目同样适用于面包板和性能板。

复古游戏机的PCB布局

2.png

图2. 复古游戏机的PCB布局

我已经提供了Eagle原理图和电路板文件供下载。

物料清单

以下表格列出了构建设备的物料清单。请注意,您需要两台游戏机才能进行无线多人游戏。

3.png

表1. 升级游戏机项目的物料清单(BOM)

彩色显示与图形库

这款1.8英寸128x160像素TFT LCD显示屏内置ST7735S SPI驱动IC,支持RGB565的16位颜色格式,能展示多达65K种颜色。不同版本的显示器可能具有不同的引脚排列,因此请确保正确连接。若您复制我的自定义PCB,需对其进行调整以适配不同的引脚。

本项目将采用Bodmer的TFT_eSPI图形库,该库专为ESP8266等32位微控制器上的动态图像显示而设计。这些图像称为精灵,存储在处理器的RAM内存中,可以以多种方式操纵,并集成到更大的2D场景中。精灵的一种颜色被指定为透明,便于将其叠加在其他图像上。

带有游戏屏幕的复古游戏机视图,包括玩家角色

人物

4.png

图3. 屏幕上的玩家角色是使用精灵实现的

本项目中的所有精灵均为itch.io的Free Tiny Hero精灵素材的修改版本。您可以根据代码中的相同逻辑,用您自己的艺术作品或互联网上的其他图形替换它们。

游戏场景

游戏中的场景分为背景、战斗区域和HUD(平视显示器)三部分:

背景

战斗区域

HUD(平视显示器)

背景采用从底部白色渐变至顶部不同次要颜色的渐变效果。在游戏启动时,顶部颜色会从几种与底部素材搭配得较好的颜色中随机选择。

战斗区域位于显示器的中间,是玩家进行战斗的场所。一名玩家将在左侧生成,而另一名玩家将在右侧生成。游戏共有三个角色,每次游戏开始时,系统会随机分配角色给每位玩家,且不会重复。

HUD位于显示器的顶部和底部,使用绿色状态栏显示每位玩家的健康点(HP),状态栏会随着玩家失去HP而递减。状态栏旁边,有描绘玩家角色和标识符(玩家1或玩家2)的框架图像。

为精灵制作动画

为达到流畅的动态效果,每当玩家执行动作时,我们会快速滚动一系列与该动作相关的图像,而非显示静态图像,从而给人一种角色在屏幕上流畅移动的错觉,类似于卡通或传统视频游戏的工作方式。

这些图像是使用Rinky Dink Electronics的image-to-RGB565工具转换为Arduino代码的精灵资产,以指针数组的形式组织,便于在渲染动作时迭代。

在这个游戏中,动作包括空转(原地停留和呼吸)、行走(步态模式)和拳击(向对手举起手臂)。每个动作只有几个图像,这些图像会根据游戏计数器变量激活,该变量在Arduino循环时递增。

使用加速度计进行运动传感

最后,我们需要为用户提供控制角色的方法。我们将使用MPU6050加速度计/陀螺仪模块,以及Refetick的MPU6050_light.h库。该库通过MPU6050芯片提供了一种轻量级、快速、简单的通信方法。

在这个项目中,我将传感器垂直连接到PCB上,使我们能够使用X轴倾斜角度读数,在控制台向任一方向倾斜时,角色会向左或向右移动。与我的电子墨水蚀刻草图项目类似,我还使用了所有三个轴的加速度读数,实现了震动检测,当用户摇动控制台时,会触发一个冲撞动作。

倾斜和抖动范围可能因您的特定MPU6050模块及其位置而异。请记住,在确定哪种灵敏度最适合您的设置之前,您必须修改不同的值。

上传代码

在了解项目背后的逻辑后,我们需要将代码上传到ESP8266微控制器。与上次相同,我将使用Lolin D1 Mini板,它配备了一个方便的USB到串行编程器。

在开始上传之前,您需要使用所有相关的板和库设置Arduino环境。我们将对主机和客户端使用相同的草图,只需两行代码来区分它们。一行是名为isHost的布尔变量(1代表主机,0代表客户端):

5.png

第二行是接收节点的相应MAC地址的数组:

6.png

主程序、音频和MAC查找器的代码可从GitHub下载。

轮到你了

除了本文及其前一个迭代中涵盖的功能外,我还包括了一个基本的“连接”屏幕,以及一些用于阻塞和躲避等操作的精灵,您可以在项目的版本中实现。

你将如何扩展这个项目?你还会包括哪些其他硬件?你想制作什么类型的游戏?

在我之前的文章中,一位用户建议切换到ESP32,它提供了更多的GPIO引脚,可能消除了对I/O扩展器的需求,I/O扩展器以前用作8位触觉开关端口。您还可以添加一个MP3播放器IC,用于播放更长、更复杂的背景音乐片段。

得益于ESP硬件,您甚至可以扩展此项目以连接到全球互联网,并与更多玩家互动,而不是ESP-NOW协议的本地化功能。


关键字:复古手持游戏机运动控制液晶显示器

责任编辑:Merry
Copyright © Science and Technology Daily, All Rights Reserved
科技日记 版权所有