android 游戏移植 (二) | SDL2.0适配 西游释厄传
android SDL系列讲解(十三) 播放音乐库 SDL_mixer教程
android 游戏移植 (一) (文末有福利) | SDL 西游释厄传调试
第一节我们整体来讲了下移植一个 C
项目到 android
的一些简单概念。
我们这节继续,来从源码级别进行分析,讲解下 FBA
游戏移植的过程。
本身游戏模拟器,已经使用 C
做好了,同时我们不需要关注里面的算法,只需要关心下,它的输入输出。
输入设备,主要讲的触摸以及按键输入,将这些按键从java端传递到c端,传入到游戏引擎的输入即可,同时关心下按键映射,将模拟器要接收的按键和传输进来的 android
端的值,进行对应。
输出设备,主要是屏幕。这里就是我们 SDL
存在的意义, SDL
通过对接 android
的 surfaceView
,将这个里面申请的 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移植过来就是如此轻松,简单。
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- ES索引模糊查询
- Dubbo定时任务时间轮(Time Wheel)算法详解
- Vue 中 data 为什么必须是一个函数
- Windows下制作nodejs后台程序的脚本-开机自启动
- Siamese Network & Triplet NetWork
- js常用函数集锦(持续更新)
- 《Java从入门到失业》第五章:继承与多态(5.8-5.10):多态与Object类
- 构建一个适合stm32mp157系列开发板的嵌入式Linux系统
- linux 达梦数据库 命令行 卸载
- Access Control: Database(数据库访问控制)最新解析及完整解决方案
- 启动Apache Atlas时报错
- Apache Atlas 安装部署
- SwiftUI:禁止用户交互
- Qt音视频开发34-Onvif时间设置
- 网络工程师提高篇 | 路由重发布你了解多少?从原理到配置,瑞哥带你学习一波!