游戏效果(不是真实画质)
image有没有被惊艳到?你的内心肯定会说,我靠,画质这么渣,画面却如此熟悉。
对的,就是如此渣渣的画面,却伴随了我们的童年快乐。
下面我们就详细的讲讲这个移植过程,说得更加具体些,就是本身这款游戏的
android
版本并非我移植的,本身模拟器也是有开源项目支持的。西游释厄传有人已经移植
ok
了,但是市面上开源的只有
SDL1.3
版本,而这个版本有个大问题,就是使用的
framebuffer
实现的,这个实现版本,由于没有使用硬件加速,所以性能大大损失。
因此,在原有项目的基础上,进行移植
SDL2.0
,支持
GPU
硬件加速,如此之后,会发现性能直接上升三倍,此游戏在低
CPU
上,就不会出现卡顿,没法玩的问题了。
下来简单讲下整个游戏的流程:
c语言开发的程序,要在android上面跑起来,主要解决以下问题:
<section class="" data-mpa-template-id="779275" data-mpa-color="null" data-mpa-category="fav" style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; word-wrap: break-word !important;">
</section>
主要就是围绕这些,算法,逻辑等等,可以直接使用c语言已经实现的,可以直接使用。
差异部分就是如何和
android
去对接,将事件传递过来,同时响应,将结果输出到屏幕。
c版本的游戏,当前移植到
android
,都不可避免的使用了
surfaceView
,因为此
View
是在
android
的java端搭出一个框架,让事件可以传递给它,同时它又在独立的自己线程会去执行绘制动作,这样保证了它的绘制,不会影响
android
普通
View
的绘制流程,从而使得c语言的绘制变得可行。
c语言开发这边,便可以拿到
surfaceViw
对应的一个绘制buffer,将这个绘制buffer封装,使用一组接口操作,便成了
OpenGL es
啦。如此之后,我们可以使用
opeGL es
的标准方法,进行操作这个buffer,从而将内容绘制到屏幕上了。
声音,按键 ,以及触摸,都是通过标准的
JAVA
和
C C++
语法之间的通道实现,即所谓的
JNI
,用来打通两边的参数传递,方法调用。
SDL
在此款游戏里面,只充当绘制的动作,其余的声音这些,都是通过JNI打通的。同时,游戏模拟器的概念类似虚拟机,也就是我们的apk运行起来,模拟出来我们的16位游戏机当时使用的
CPU
,以及内存地址空间,如此一来,我们将对应的游戏
ROM
,加载起来运行,便可以在此虚拟环境下,正常运行。
俄罗斯方块效果
image这个是PC上面的效果,还未移植到android,主要是在考虑,到底该不该用贴图来实现更炫的画质,还是就保持绘制线条的方式,敬请期待吧! 再个原因就是:时间真的不充裕,毕竟这个是周末空闲时间来写的。
下节来分析代码,以及讲解移植过程,想要查看下载代码的,可以先行阅读了。
源码位置:
https://github.com/Cpasjuste/afba
https://github.com/Cpasjuste/libarcade
俄罗斯方块源码:
http://pan.baidu.com/s/1eSH7J6U
<section class="" data-mpa-template-id="779275" data-mpa-color="null" data-mpa-category="fav" style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; word-wrap: break-word !important;">
推荐阅读:
福利:
image</section>
网友评论