升级我的复古手持游戏机,配备运动控制和液晶显示器

升级我的复古手持游戏机,配备运动控制和液晶显示器
2024年10月16日 15:37 电子产品世界

按照我对手持游戏控制器的升级,我添加了一个新的1.8英寸彩色LCD用于动画图形,以及一个用于运动控制输入的加速计模块。

本文引用地址:

在我之前的一篇文章中,我介绍了一种复古风格的手持游戏机的开发过程,该游戏机具有本地无线多人连接功能。本文将重点介绍使用1.8英寸彩色LCD进行动画图形升级,以及使用加速计模块进行运动控制输入。

对于我们升级的硬件,我们将使用ESP8266编写一个简单的基于Arduino的格斗游戏,在游戏中,屏幕两侧的两名玩家相互战斗,直到其中一人失去所有生命值。每个角色都将以16位颜色设置动画,并可通过倾斜和摇晃玩家各自的控制台进行控制。

在构建这个项目之前,您可能想回顾一下本系列的第一部分,了解使用ESP-NOW进行无线通信的基础知识,将MIDI文件转换为背景音频并播放,视频游戏中的碰撞检测,以及如何将代码上传到ESP8266微控制器。

电路设计和PCB布局

图1是我们复古手持设备改进版本的Eagle接线示意图。

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

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

升级后的控制台的PCB设计不必改变,因为我故意留出了扩展空间,包括用于更大SPI显示器和I2C传感器模块的引脚头(图2)。然而,与我的大多数项目一样,今天所涵盖的一切都是面包板和性能板友好的。

复古游戏机的PCB布局

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

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

物料清单

下表显示了构建一个设备的物料清单。请记住,您需要两个游戏机才能进行无线多人游戏。

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

彩色显示和图形库

该显示器为1.8英寸128x160像素TFT LCD,内置ST7735S SPI驱动IC。它使用一种名为RGB565的16位颜色格式,这意味着我们可以显示高达65K的颜色。您会发现此显示器的不同版本提供了不同的引脚排列,因此请确保正确连接。如果你正在复制我的自定义PCB,你需要修改它以支持不同的引脚。

对于这个项目,我们将使用Bodmer的TFT_eSPI图形库,该库专门用于在ESP8266等32位微控制器上显示动态图像。这些类型的图像称为精灵,存储在处理器的RAM内存中。它们可以以各种方式操纵,并集成在更大的2D场景之前或之后。精灵的一种颜色总是被指定为透明的,这样很容易将它们叠加在其他图像上。

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

人物

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

此项目中使用的所有精灵都是itch.io的Free Tiny Hero精灵素材的修改版本。您始终可以按照我代码中的相同逻辑,用自己的艺术或互联网上的其他图形替换它们。

游戏场景

我们游戏中的场景分为三个部分:

背景

战斗区域

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代表客户端):

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

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

轮到你了

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

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

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

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

新浪科技公众号
新浪科技公众号

“掌”握科技鲜闻 (微信搜索techsina或扫描左侧二维码关注)

创事记

科学探索

科学大家

苹果汇

众测

专题

官方微博

新浪科技 新浪数码 新浪手机 科学探索 苹果汇 新浪众测

公众号

新浪科技

新浪科技为你带来最新鲜的科技资讯

苹果汇

苹果汇为你带来最新鲜的苹果产品新闻

新浪众测

新酷产品第一时间免费试玩

新浪探索

提供最新的科学家新闻,精彩的震撼图片