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

image

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

image

有没有被惊艳到?你的内心肯定会说,我靠,画质这么渣,画面却如此熟悉。

对的,就是如此渣渣的画面,却伴随了我们的童年快乐。

下面我们就详细的讲讲这个移植过程,说得更加具体些,就是本身这款游戏的

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,从而将内容绘制到屏幕上了。

声音,按键 ,以及触摸,都是通过标准的

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

推荐阅读:

福利:

送书福利,不忘初心!

image

相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页
实付 19.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值