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

原文发布于微信公众号 - 代码GG之家(code_gg_home)

原文发表时间:2017-10-31

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏星流全栈

新手向:Vue 2.0 的建议学习顺序

1025
来自专栏互联网杂技

20个为前端开发者准备的文档和指南4

1.I want to use 基于的数据和功能都在Can I use网站上列出来了,这个app可以给你选择很多前端开发功能的能力和获得全世界用户看到你选择的功...

34210
来自专栏日常学python

同学利用Python爬虫制作王者荣耀出装助手,引来了隔壁班的女生!

暑假回家,”小皇帝”般的生活持续了几天,头几天还挺舒服,闲久了顿时觉得好没意思。眼看着10天的假期就要结束,曾信誓旦旦地说要回家学习,可拿回家的两本书至今一页未...

1252
来自专栏企鹅号快讯

Web前端开发初级阶段需要学习的知识有哪些?

今天来和大家讲讲Web前端开发需要学习什么?前端开发又需要用到哪些开发工具?下面济南IT培训优就业的老师就简单和大家介绍一下。 ? Web前端工程师其实在不同的...

20610
来自专栏程序员互动联盟

【专业技术】chromium GPU 硬件加速合成

前言: 在传统浏览器网页渲染实现方案中,网页完全依赖CPU的能力去渲染网页(软件渲染简介:网页生成一张bitmap丢给CPU去绘制),然而一台机器的CPU不仅...

2706
来自专栏技术翻译

2018年Web开发人员应该学习的12个框架

它可以帮助你获得更好的工作,并将你的职业生涯提升到新的水平,如果遇到无聊的工作,例如启动和停止服务器,设置一些cron作业,以及回复维护传统的旧电子邮件应用,使...

2544
来自专栏编程微刊

提高工作效率的几个小技巧

1564
来自专栏IT大咖说

那些年我们一起踩过的坑——WebIDE 前端札记

2524
来自专栏刘望舒

Android目前最稳定和高效的UI适配方案

Android系统发布十多年以来,关于Android的UI的适配一直是开发环节中最重要的问题,但是我看到还是有很多小伙伴对Android适配方案不了解。刚好,近...

1752
来自专栏速成应用小程序

怎么避免微信小程序下架审核不通过 【解决办法】

避免被拒小程序不能用作营销活动、广告用途,不能存在类似算命、星座运势之类的测试类内容,不能包含赌博竞猜抽奖等内容。

54317

扫码关注云+社区

领取腾讯云代金券