月光宝盒游戏机MAME街机模拟器方案源码项目解析----米饭模拟器(2)
上一章节中讲叙月光宝盒项目的由来和介绍,本章节从一个月光宝盒中单一的模拟器来说起: 那就是街机模拟器。街机模拟作为经典的游戏经久不衰,现在去游戏厅还能看见很多这样的游戏机。
这样的游戏机,画面上面 还能看到月光宝盒3/4的 字样,现在月光宝盒已经发展到11了,因为现在你所能看到的游戏机基本都被 月光宝盒 占领啦,但无论怎么发展 街机游戏都是在首要的位置。
街机游戏目前主要有几个模拟器(方向):MAME街机,FBA 街机,Arcade 街机, neogeo ,kawaks,nebula等,这些都是目前存在的街机模拟器,那么自己的项目适合哪一个,或者说哪一个性价比比较高
:自己能用上而且成本最低?
米饭游戏对这些模拟器进行了研究,而且开发出了针对月光宝盒合适的模拟器,(可自行下载体验:ricegame.cn ;
结论: 其中mame支持的游戏rom最多,但是界面不太方便。winkawaks支持的游戏数量仅次于mame,缺点是画面一般。neogeo只能模拟snk公司的游戏,数量少,画面差,综合垫底。nebula是四个模拟器中画面最好,界面最好的,但支持的游戏数量不如winkawaks和mame。MAME其实已经够了,但是界面确实不友好。FBA也不错。Kawaks和Nebula实际上有点老了,支持的街机硬件相对少,而且它们跟MAME的ROM有些不能互相兼容。
米饭模拟器针对目前存在的情况(软件使用情况和源代码开发情况),进行了开发得出了适合月光宝盒的街机模拟器。米饭模拟器支持:mame 和fba 和Arcade 。基本上解决了很多的街机问题,就是说,市场上面所有能玩的,米饭模拟器都能玩。
所以如果用米饭模拟器解决方案或事半功倍。
实际上mame 是开源的,其他几个很少有开源的,或者说开源了,但是是Linux的 自己要移植开发成本也比较高 。
我们可以百度一下mame源码编译运行可以看到这样的运行截图:
这是什么鬼,这样的截图 与我们想要的 月光宝盒UI 相差太远了,我们期待是这样的截图(月光宝盒12截图):
这就是为什么说,其中mame支持的游戏rom最多,但是界面不太方便。不太方便就是因为国外的开发者只考虑到使用,没考虑到实用,自己二次开发需要修改c代码,用c代码做界面,你不知道它用的什么UI框架,框架不同做出来的UI 也不同,总之开发界面起来非常不方便,一般人只能放弃,厉害一些的需要看懂代码二次开发,用Android java去开发模拟器,这样写UI也快。
米饭模拟器,经过大量二次开发,做到这一点,java 开发UI ,启动游戏适合才去调用游戏模拟器玩游戏,这样将Ui与模拟器分离开来优势也非常明显。
1:维护方便。 月光宝盒经常要改的主要是UI。而java开发的UI 一般人都很容易而且很快就改好。
2:开发快。java UI 对触摸和按键处理也是非常方便的,也是很快的。
3:稳定。模拟器使用米饭模拟器,不用担心不稳定,因为运用多个平台多个项目。就算模拟器在某些情况崩溃,也不会导致java主界面UI 奔溃。因为模拟器和UI 在不同的进程里面。
下面还是贴一些编译过程:
此步骤比较麻烦,主要工作都集中于此步。
1. 配置makefile
此处历经周折,mame 的makefile配置需要依赖本地NDK环境,因此需要配置各种路径,include, ldflag。尝试了gcc、clang等编译失败,文件中的好多写法不被clang接受,而且makefile中的编译选项是gnu的 (0_0)。最终由于源码是混合了c与c++而如果编译器根据文件后缀来确定语言类型将导致编译出错。我选择使用g++,既可以编译C又可以编译C++。
NDK 笔者使用NDK 17.2.4988734,原因是 安卓自NDK-r18起移除了gcc, 并完全删除了gnustl、gabi++ 和 stlport。而模拟器源码使用了stl。
具体配置详见github makefile 文件
2. 编译
编译报错 opensl_snd.c:51:30: error: 'memcpy' was not declared in this scope, 找不到memcpy。解决办法 在opensl_snd.c中添加#include <string.h>
aarch64-linux-android/bin/ld: cannot find crtbegin_so.o: No such file or directory和aarch64-linux-android/bin/ld: cannot find crtend_so.o: No such file or directory 不知道为什么ld始终找不到这2个.o 配置了-L选项也不行,最后没办法把crtbegin_so.o,crtend_so.o拷到makefile同级目录Linking通过。(后来改为ln -s 软连接的方式,已配置到makefile实现自动ln armv7a和armv8a。
libMAME4droid.so: dlopen failed: cannot locate symbol "_ZNSs4_Rep20_S_empty_rep_storageE" 找不到_ZNSs4_Rep20_S_empty_rep_storageE这个符号,经查是c++ string类型的默认值,感觉是手机上没有找到这个,试了把libgnustl_shared.so打到apk包里,运行解决。(我用旧版本的AS-3.4.1 在Application.mk中配置了APP_STL := gnustl_shared后,nkd-build 会自动将libgnustl_shared.so拷贝到libs/armeabi-xxx目录下,升级3.5之后就没有这个行为了,不知道是不是AS改了这方面功能)
编译的最终结果将得到一个名为mame或mame64的二进制文件,即我们的 libMAME.so 库。
当然工程里面还需要配置一下编译jni文件,你可以选择使用ndk-build或是cmake。两种我都写了一下,改下app的build.gradle可以切换两种编译方式。
月光宝盒游戏机MAME街机模拟器方案源码项目解析----米饭模拟器(2)相关推荐
- 3D月光宝盒游戏机模拟器方案源码项目解析(1)
月光宝盒概述 月光宝盒游戏机项目的历史可说有10年左右了,最早是广州的厂做的方案,发现市场非常好,然后越来越多人加入到类似月光宝盒游戏机上面来. 就连 经典的 "小霸王" 也加入其 ...
- 三菱 plc方案源码STM32工控板fx2n源码
三菱 plc方案源码STM32工控板fx2n源码 FX2N源码V9.x完善高性能版,程序架构清晰,注释详细,支持大部分指令,当前最新功能如下: 13.FX2N源码持续升级中. . . 亲们,敬请关注! ...
- XxlJob与Datax-web调度方案源码分析
XxlJob与Datax-Web调度方案源码分析 目录 前言 XxlJob架构设计 XxlJob代码实现 Admin管理器启动流程 作业调度线程池初始化 节点注册线程 失败作业预警线程 完结作业后置处 ...
- 易语言模拟器中控源码 全新手游模拟器通用中控源码, 适用于各种游戏, 源码现成的只需要更换游戏就可以用哦
易语言模拟器中控源码 全新手游模拟器通用中控源码, 适用于各种游戏, 源码现成的只需要更换游戏就可以用哦, 带修改教程,带讲解说明, 简单易懂不需要别人指导在家可以自学. 降低新手编写多线程中控的门槛 ...
- 高清解霸卡 游戏机(街机)视频图像画面转换的黄金搭档
编者按:广百思科技有限公司在了解到游戏机将全面向液晶屏转型的信息后,迅速研发并推出了高清解霸GBS8200这一全兼容,中英文菜单提示(OSD)操作的游戏机视频转换板.该产品采用日本进口原装芯片,完美支 ...
- Layui上传文件时choose事件只触发一次的问题(两种解决方案+最终解决方案源码)
问题描述:使用layui的组件实现的文件列表添加和上传,第一次弹出此页面,可添加多个文件,点击上传,可以成功上传,但再次弹出此页面时,添加文件无法触发choose方法,上传依然是正常的,话不多说,看解 ...
- Top1方案源码和数据,腾讯广告受众基础属性预估
向AI转型的程序员都关注了这个号???????????? 人工智能大数据与深度学习 公众号:datayx 比赛将为参赛者提供一组用户在长度为 91 天(3 个月)的时间窗口内的广告点击历史记录作为训 ...
- 数据缺失,如何智能修复?第一名方案源码分享
向AI转型的程序员都关注了这个号
- 安卓/电脑扑克识别方案源码讲解(含源码在最后)
上一个文章讲了麻将识别的整个过程: 采集样本->标注->训练->测试. 本专栏主要讲人工智能图像识别,图像识别解决身边的实际问题!订阅专栏可了解相关原理和获得源码 这篇文章细节没有麻 ...
- jsmpeg+websocket 播放单个或多个直播视频rtsp协议低延迟视频方案源码
JSMpeg 是用 JavaScript 编写的视频播放器.它包括 MPEG-TS 解码器,MPEG 1 视频和 MP2 音频解码器,WebGL 和 Canvas2D 渲染器和 WebAudio 声音 ...
最新文章
- XenMobile 8.7对iOS7.1 企业级MDM管理功能带来哪些扩展?
- mac os 和 ubuntu 上测试工具check-0.9.10的安装
- wxWidgets:wxDataViewEvent类用法
- P142-144使用Tensorflow自定义一个线性分类器用于对“良/恶性乳腺癌肿瘤”进行预测
- python 内置模块 subprocess
- 总结常见的ES6新语法特性
- Windows下搭建Android开发环境
- storyboard之 Segue
- IDEA解决maven多module出现多root的问题
- AUTOSAR – RTE(3)任务的并发
- VS2008+QT+CYAPI开发USB程序问题
- Oracle Windows ODBC 数据源配置。
- 南阳理工ACM 第71题
- 使用FastReport报表工具生成标签打印文档
- python3 词频统计代码_Python词频统计代码,python
- ON1 Resize AI 2022(图片无损放大软件)官方中文版介绍 | 图片无损放大用什么软件 | 图片无损放大软件哪个好用?
- 国内的服务器的优势就是,国产芯片服务器的优势是什么
- 【大厂面试】面试官看了赞不绝口的Redis笔记
- VS2010工程文件
- 谷哥学术2022年2月份资源分享下载列表14/20
热门文章
- 网络安全-技术与实践 书本习题练习
- java+微博上传图片_GitHub - lkshuihua/webpic: 轻量级Java 上传图片 到微博图床小工具...
- 台式计算机如何连接vif,电脑各种接口规范
- 图表控件ScottPlot
- Unity DOTS在hybird renderer v2 中rendermesh不显示
- 长微博生成器 php,【九零天下】长微博生成器的PHP代码部分
- Android 神兵利器之通过解析网页获取到的API数据合集,可拿来就用
- 绿色清爽win7电脑主题 +炫酷紫色win7主题+美女写真电脑主题
- win10系统对计算机要求,Win10系统对电脑配置要求 win10专业版教程
- 视频号一条视频涨粉8W