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移植过来就是如此轻松,简单。