android 游戏移植 (一) (文末有福利) | SDL 西游释厄传调试

时间:2022-04-26
本文章向大家介绍android 游戏移植 (一) (文末有福利) | SDL 西游释厄传调试,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

游戏效果(不是真实画质)

有没有被惊艳到?你的内心肯定会说,我靠,画质这么渣,画面却如此熟悉。对的,就是如此渣渣的画面,却伴随了我们的童年快乐。

下面我们就详细的讲讲这个移植过程,说得更加具体些,就是本身这款游戏的 android 版本并非我移植的,本身模拟器也是有开源项目支持的。西游释厄传有人已经移植 ok了,但是市面上开源的只有 SDL1.3版本,而这个版本有个大问题,就是使用的 framebuffer 实现的,这个实现版本,由于没有使用硬件加速,所以性能大大损失。

因此,在原有项目的基础上,进行移植 SDL2.0 ,支持 GPU 硬件加速,如此之后,会发现性能直接上升三倍,此游戏在低 CPU 上,就不会出现卡顿,没法玩的问题了。

下来简单讲下整个游戏的流程:

c语言开发的程序,要在android上面跑起来,主要解决以下问题:

  • c语言与java语言的jni接口
  • c语言的按键,触摸,以及手柄等事件传递
  • c语言的声音播放
  • c语言的绘制,显示

主要就是围绕这些,算法,逻辑等等,可以直接使用c语言已经实现的,可以直接使用。

差异部分就是如何和 android 去对接,将事件传递过来,同时响应,将结果输出到屏幕。

c版本的游戏,当前移植到 android ,都不可避免的使用了 surfaceView ,因为此 View 是在 android 的java端搭出一个框架,让事件可以传递给它,同时它又在独立的自己线程会去执行绘制动作,这样保证了它的绘制,不会影响 android 普通 View 的绘制流程,从而使得c语言的绘制变得可行。

c语言开发这边,便可以拿到 surfaceViw 对应的一个绘制buffer,将这个绘制buffer封装,使用一组接口操作,便成了 OpenGL es 啦。如此之后,我们可以使用 opeGL es 的标准方法,进行操作这个buffer,从而将内容绘制到屏幕上了。

声音,按键 ,以及触摸,都是通过标准的 JAVAC C++ 语法之间的通道实现,即所谓的 JNI ,用来打通两边的参数传递,方法调用。

SDL 在此款游戏里面,只充当绘制的动作,其余的声音这些,都是通过JNI打通的。同时,游戏模拟器的概念类似虚拟机,也就是我们的apk运行起来,模拟出来我们的16位游戏机当时使用的 CPU ,以及内存地址空间,如此一来,我们将对应的游戏 ROM ,加载起来运行,便可以在此虚拟环境下,正常运行。

俄罗斯方块效果

这个是PC上面的效果,还未移植到android,主要是在考虑,到底该不该用贴图来实现更炫的画质,还是就保持绘制线条的方式,敬请期待吧! 再个原因就是:时间真的不充裕,毕竟这个是周末空闲时间来写的。

下节来分析代码,以及讲解移植过程,想要查看下载代码的,可以先行阅读了。

源码位置:

https://github.com/Cpasjuste/afba

https://github.com/Cpasjuste/libarcade

俄罗斯方块源码:

http://pan.baidu.com/s/1eSH7J6U