上一章节中讲叙月光宝盒项目的由来和介绍,本章节从一个月光宝盒中单一的模拟器来说起: 那就是街机模拟器。街机模拟作为经典的游戏经久不衰,现在去游戏厅还能看见很多这样的游戏机。

这样的游戏机,画面上面 还能看到月光宝盒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)相关推荐

  1. 3D月光宝盒游戏机模拟器方案源码项目解析(1)

    月光宝盒概述 月光宝盒游戏机项目的历史可说有10年左右了,最早是广州的厂做的方案,发现市场非常好,然后越来越多人加入到类似月光宝盒游戏机上面来. 就连 经典的 "小霸王" 也加入其 ...

  2. 三菱 plc方案源码STM32工控板fx2n源码

    三菱 plc方案源码STM32工控板fx2n源码 FX2N源码V9.x完善高性能版,程序架构清晰,注释详细,支持大部分指令,当前最新功能如下: 13.FX2N源码持续升级中. . . 亲们,敬请关注! ...

  3. XxlJob与Datax-web调度方案源码分析

    XxlJob与Datax-Web调度方案源码分析 目录 前言 XxlJob架构设计 XxlJob代码实现 Admin管理器启动流程 作业调度线程池初始化 节点注册线程 失败作业预警线程 完结作业后置处 ...

  4. 易语言模拟器中控源码 全新手游模拟器通用中控源码, 适用于各种游戏, 源码现成的只需要更换游戏就可以用哦

    易语言模拟器中控源码 全新手游模拟器通用中控源码, 适用于各种游戏, 源码现成的只需要更换游戏就可以用哦, 带修改教程,带讲解说明, 简单易懂不需要别人指导在家可以自学. 降低新手编写多线程中控的门槛 ...

  5. 高清解霸卡 游戏机(街机)视频图像画面转换的黄金搭档

    编者按:广百思科技有限公司在了解到游戏机将全面向液晶屏转型的信息后,迅速研发并推出了高清解霸GBS8200这一全兼容,中英文菜单提示(OSD)操作的游戏机视频转换板.该产品采用日本进口原装芯片,完美支 ...

  6. Layui上传文件时choose事件只触发一次的问题(两种解决方案+最终解决方案源码)

    问题描述:使用layui的组件实现的文件列表添加和上传,第一次弹出此页面,可添加多个文件,点击上传,可以成功上传,但再次弹出此页面时,添加文件无法触发choose方法,上传依然是正常的,话不多说,看解 ...

  7. Top1方案源码和数据,腾讯广告受众基础属性预估

    向AI转型的程序员都关注了这个号???????????? 人工智能大数据与深度学习  公众号:datayx 比赛将为参赛者提供一组用户在长度为 91 天(3 个月)的时间窗口内的广告点击历史记录作为训 ...

  8. 数据缺失,如何智能修复?第一名方案源码分享

    向AI转型的程序员都关注了这个号

  9. 安卓/电脑扑克识别方案源码讲解(含源码在最后)

    上一个文章讲了麻将识别的整个过程: 采集样本->标注->训练->测试. 本专栏主要讲人工智能图像识别,图像识别解决身边的实际问题!订阅专栏可了解相关原理和获得源码 这篇文章细节没有麻 ...

  10. jsmpeg+websocket 播放单个或多个直播视频rtsp协议低延迟视频方案源码

    JSMpeg 是用 JavaScript 编写的视频播放器.它包括 MPEG-TS 解码器,MPEG 1 视频和 MP2 音频解码器,WebGL 和 Canvas2D 渲染器和 WebAudio 声音 ...

最新文章

  1. XenMobile 8.7对iOS7.1 企业级MDM管理功能带来哪些扩展?
  2. mac os 和 ubuntu 上测试工具check-0.9.10的安装
  3. wxWidgets:wxDataViewEvent类用法
  4. P142-144使用Tensorflow自定义一个线性分类器用于对“良/恶性乳腺癌肿瘤”进行预测
  5. python 内置模块 subprocess
  6. 总结常见的ES6新语法特性
  7. Windows下搭建Android开发环境
  8. storyboard之 Segue
  9. IDEA解决maven多module出现多root的问题
  10. AUTOSAR – RTE(3)任务的并发
  11. VS2008+QT+CYAPI开发USB程序问题
  12. Oracle Windows ODBC 数据源配置。
  13. 南阳理工ACM 第71题
  14. 使用FastReport报表工具生成标签打印文档
  15. python3 词频统计代码_Python词频统计代码,python
  16. ON1 Resize AI 2022(图片无损放大软件)官方中文版介绍 | 图片无损放大用什么软件 | 图片无损放大软件哪个好用?
  17. 国内的服务器的优势就是,国产芯片服务器的优势是什么
  18. 【大厂面试】面试官看了赞不绝口的Redis笔记
  19. VS2010工程文件
  20. 谷哥学术2022年2月份资源分享下载列表14/20

热门文章

  1. 网络安全-技术与实践 书本习题练习
  2. java+微博上传图片_GitHub - lkshuihua/webpic: 轻量级Java 上传图片 到微博图床小工具...
  3. 台式计算机如何连接vif,电脑各种接口规范
  4. 图表控件ScottPlot
  5. Unity DOTS在hybird renderer v2 中rendermesh不显示
  6. 长微博生成器 php,【九零天下】长微博生成器的PHP代码部分
  7. Android 神兵利器之通过解析网页获取到的API数据合集,可拿来就用
  8. 绿色清爽win7电脑主题 +炫酷紫色win7主题+美女写真电脑主题
  9. win10系统对计算机要求,Win10系统对电脑配置要求 win10专业版教程
  10. 视频号一条视频涨粉8W