RetroPie 是啥?
RetroPie 是一个非常酷的开源项目,它可以让树梅派等单板计算机转变为游戏机。这个项目的目的是让人们可以在使用低成本硬件的同时,享受到来自过去的游戏和娱乐体验。
RetroPie 可以运行在树梅派上,其中包括了多种模拟器,少数派的游戏机、街机游戏以及掌机游戏都可轻松运行。玩家可以使用USB手柄或游戏板进行游戏,这个系统还支持完全自定义的按钮设置,因此无论是那种类型的游戏,玩家都可以全身心地体验其中乐趣。
在我们的 GitHub 地址https://github.com/RetroPie/RetroPie-Setup中,可以找到与 RetroPie 相关的大量代码和文档。这个项目使用了 Shell 开发,它被设计为非常轻量级和便携,因此它可以轻松地在树莓派等单板计算机上运行。
初看 RetroPie,你可能会认为它只是一个简单的项目。 但是,通过这个项目拥有了9.4K 的 Star,我们可以得到一个确切的证明,即这个项目有其独特而出色的地方。这些创新可能包括它的高度灵活性以及多种模拟器和游戏类型支持等等。无论如何,RetroPie 确实是一个非常值得探索的项目,值得开发人员进一步深入研究和寻找创新点。
想要实现模拟复古游戏机最重要的 2 件事:
1、有能模拟运行复古游戏的模拟器。
最流行的模拟器是 RetroArch。
RetroArch 本身不负责模拟游戏,而且为各种更底层的各种模拟器提供一套统一的框架。
RetroArch 负责音频、显示等各种基础功能,各种模拟器核心负责实际地对游戏模拟。
一个模拟器核心能模拟一个硬件平台,例如 mGBA 能模拟 GBA 掌机。
2. 有一个能让用户选择启动游戏的菜单界面,即启动器。
最流行的开源启动器是 Emulationstation。
树梅派上运行 Emulationstation
另一个比较优秀的开源启动器是 Pegasus:
树梅派上运行 Pegasus
Pegasus 是 Qt 写的,感兴趣的话,可以看看其源码,代码质量挺好的。
内部实现
我曾经阅读过一段时间的 RetroPie 的源码。
最深刻地感受是:优雅、真香。
从需求上看,RetroPie 最核心的功能是要编译、安装、配置 RetroArch、Emulationstation 和各种模拟器软件包。
对于每一个软件包,RetroPie 都会定义一组函数集:
function depends_${package}()
{
...
}
function sources_${package}()
{
...
}
function build_${package}()
{
...
}
function install_${package}()
{
...
}
function configure_${package}()
{
...
}
分别对应获取源码、编译、安装、配置 4个步骤。
每一个软件包都只要专注在实现这 4 个接口上,以便 RetroPie 的核心层调用。
RetroPie 的核心层:
system.sh,用于适配多个硬件平台。
helpers.sh,包含各种辅助函数。
packages.sh,软件包管理相关的 API。
运行 RetroPie 的 retropie_setup.sh 时,首先会将所有的软件包注册进核心层,存放在数组里。
相关 API 是:rp_registerModule()
当要编译安装某个软件包时,以 Retroarch 为例,会通过 rp_callModule() 依次调用 retroarch.sh 里的:
function depends_retroarch()
{
...}
function sources_retroarch()
{
...
}
function build_retroarch()
{
...
}
function install_retroarch()
{
...
}
RetroPie 的核心设计就是上面这些内容,但是具体实现起来,还是有很多技巧在里面的,非常值得我们学习,这里我就不展开分析了。
另外,RetroPie 的 Shell 编码风格非常好,我们可以将其作为标准。
我在工作中写过许多 shell 脚本,大致分类为:
-
测试稳定性的脚本; -
辅助定位 bug 的脚本; -
辅助日常工作的自动化脚本; -
用于快速构建软件原型的脚本; -
公司内部软件;
最深刻地感受是:
**Shell 是一把利器,用起来很爽,但是要小心一点,别伤着自己了。
**
总结
RetroPie 是一个优秀的开源项目,它的功能并不复杂,这是由于它有极其的优秀的设计。
我从中学到的东西:
将简单的功能做好做稳定,是一件很了不起的事。
做板子的公司那么多,而做到全球流行的只有树梅派一家。
做一个好的产品,从来不是靠点子,不是靠能力,不是靠智力,而是看你有没全心全意为用户着想,是否始终从用户的角度出发。
以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !