android 游戏移植 (二) | SDL2.0适配 西游释厄传

SDL系列讲解(一) 简介

SDL系列讲解(二) 环境搭建

SDL系列讲解(三) 工具安装

SDL是什么,能干什么,为什么我们要学习它?

SDL系列讲解(四) demo讲解

SDL系列讲解(五) 调试c代码

SDL系列讲解(六) SDL_Activity流程

SDL系列讲解(七) SDL_image教程

SDL系列讲解(八) SDL_ttf教程

SDL系列讲解(九) 异常退出分析

SDL系列讲解(十) 按键处理流程

SDL系列讲解(十一) SDL_QUIT流程

SDL系列讲解(十二)创建窗口流程

android SDL系列讲解(十三) 播放音乐库 SDL_mixer教程

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

第一节我们整体来讲了下移植一个 C项目到 android的一些简单概念。

我们这节继续,来从源码级别进行分析,讲解下 FBA游戏移植的过程。

本身游戏模拟器,已经使用 C做好了,同时我们不需要关注里面的算法,只需要关心下,它的输入输出。

输入设备,主要讲的触摸以及按键输入,将这些按键从java端传递到c端,传入到游戏引擎的输入即可,同时关心下按键映射,将模拟器要接收的按键和传输进来的 android端的值,进行对应。

输出设备,主要是屏幕。这里就是我们 SDL存在的意义, SDL 通过对接 androidsurfaceView,将这个里面申请的 surface进行包装,使用 opengl es进行操作,完成界面的绘制。

游戏的声音,使用了 jni,来达到从 c c调用 java,来处理声音的播放。

于是乎,便完成了整体的移植,需要处理的事情。

上面这个移植过程,三方的开源项目已经帮忙实现了。我们要做的是,将其中的 SDL1.3 移植到 SDL2.0 ,这便是我们这节讲解的主要内容。

既然我们知道了, SDL 需要对接的是绘制过程,于是我们就需要找到1.3绘制的代码位置,通过查找,可以在 android_sdlfx.c 里面,看到具体实现。

可以看到,创建了一个 surface,将图片格式设置之后,提供给游戏,让游戏去绘制,然后将这个数据传给 java,完成推送到屏幕上。

我们这里要换的,就是对外提供数据的地方,我们要按照 SDL2.0 创建一个窗口,同时创建一个 surace ,将数据绘制在这个上面,同时默认1.3是将这个数据,搬回到 java端,然后进行刷新。

2.0之后,支持了直接绘制,可以直接使用渲染方法,将数据送到屏幕。

代码主要修改记录如下:

SDL1.3 整个代码去掉,同时将 SDL2.0 加入进来,将适配 android 版本里面,只需要将创建窗口的方式,以及绘制的方式替掉,即可完成移植过程。

我们这节放出修改成 SDL2.0 的核心代码,其他的有兴趣的可以进行实际移植,配置,注意的是,这个项目在 Window 上是编不过的,因为命令行长度限制,所以要在linux环境进行操作。

关于游戏模拟器本身代码,不需要关注。

文件里面,可以看到用到了适配,每个输出设备,都是有这几个方法组成,我们主要关心的是 init ,完成窗口的创建,画布的创建, Exit完成窗口的退出过程。 frame 主要完成每一帧的更新,其他的我们暂时可以不去关注了。

1:更改创建模式,使用2.0的方式。

2:更改创建surface的方式,使用SDL_CreateTexture创建纹理,随后绘制使用

3:设置小窗口大小

4:绘制使用渲染器,将surface更新到渲染器中,然后更新屏幕

看到了么,sdl2.0移植过来就是如此轻松,简单。

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

原文发表时间:2017-11-11

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏前端黑板报

构建离线web应用(一)

本文由哔哩哔哩前端工程师 墨白 翻译分享 我喜欢移动app,而且也是那些坚持使用Web技术构建移动应用程序的人之一。 经过技术的不断迭代(可能还有一些其它的东西...

352100
来自专栏非著名程序员

AndroidTShare Weekly No.9

本周热点开源项目 夜间模式渐变实现 这个实现了夜间模式渐变效果了,过渡的非常自然。 效果图如下: ? 作者:chkfung 项目开源地址:https://gi...

22760
来自专栏Windows Community

在Windows商店应用中使用浅色主题

在开发商店应用时会遇到这样的情况,设计师给我们的设计是浅色背景/深色文本,而商店应用默认是深色背景/浅色文本。那我们需要在每个页面去显式声明背景色和前景色吗,这...

34380
来自专栏hightopo

iOS平台快速发布HTML5拓扑应用

14020
来自专栏H2Cloud

Base PyQt4, Simple Web APP Framwork

  长时间以来,一直针对Linux 服务器开发后台程序,每天面对的是黑框框,输出只有日志文件。偶尔需要模拟客户端测试,要么是写几行php代码,在浏览器上点一点,...

42840
来自专栏葡萄城控件技术团队

ActiveReports 报表应用教程 (12)---交互式报表之贯穿钻取

在葡萄城ActiveReports报表中提供强大的数据分析能力,您可以通过图表、表格、图片、列表、波形图等控件来实现数据的贯穿钻取,在一级报表中可以通过鼠标点击...

27260
来自专栏张戈的专栏

原创插件:WordPress读者排行榜插件WP Readers Ranking

貌似在上个月,我就和中国历史、梦轩丽人等几位博友提过,张戈博客分享的《WordPress 酷炫 CSS3 读者墙,排名按年度、本月、本周划分的小方法》,其实可以...

41380
来自专栏天天P图攻城狮

iOS基础开发实践:iMessage Extension浅析

29520
来自专栏JackieZheng

AngularJS in Action读书笔记1——扫平一揽子专业术语

前(fei)言(hua):   数月前,以一个盲人摸象的姿态看了一些关于AngularJS的视频书籍,留下了我个人的一点或许是指点迷津或许是误人子弟的读后感。自...

20370
来自专栏HT

iOS平台快速发布HT for Web拓扑图应用

      iOS平台一直是封闭的生态圈,iOS开发者要缴纳年费加入开发者计划才可进行iOS平台的APP开发测试,所开发的APP需要上传到App Store经过...

30370

扫码关注云+社区

领取腾讯云代金券