今天又花了4个小时试图使SDL hg在android上运行,无果。从头到尾的黑屏让人绝望。
算了,我错了,越级打怪是我不对,以后再也不敢了。
(我的4个小时啊
)
关于SDL HG,在网上能找到的资料实在是非常的少了,少到我没能找到一个可以执行的例子(官方文档里20几行的不算)。SDL的图像缩放旋转库SDL_gfx只支持SDL到1.3 想在SDL2.0 或者叫SDL HG上编译SDL_gfx库,还需要直接在源代码里动一些手脚:
==================================================================
1. 把源代码里的所有(3处)“SDL_MINOR_VERSION == 3” 改为 “SDL_MAJOR_VERSION == 2”.
因为SDL_gfx针对1.3版本做了一些应对,但2.0/hg版本的大版本号是2,小版本号是0,而gfx只检查了小版本号是否为3。我的改动让gfx针对1.3的改动直接在2.0上生效,当然更周全的办法是兼顾1.3和2.0。嘛,不管了
2. SDL_SetColorKey(src, XXX, k)之类 改为 SDL_SetColorKey(src, SDL_TRUE, k)
新版本就这么定的,没什么道理可讲= =
3. SDL_SetAlpha(dst, SDL_SRCALPHA, 255)之类 改为 SDL_SetSurfaceAlphaMod( dst, 255)
同上
4. if (src->flags & SDL_SRCCOLORKEY) 改为 if( SDL_GetColorKey(src, NULL) == 0 )
新版里没有SDL_SRCCOLORKEY这个定义了,colorkey也不是在flags里查了。想看看有没有设定colorkey可以用SDL_GetColorKey(src, NULL). 如果返回0,说明有colorkey,如果返回-1,说明没有colorkey。具体的可以在src/video/SDL_surface.c里看一下SDL_GetColorKey的实现。
5 SDL_CreateRGBSurface(SDL_SWSURFACE | SDL_HWSURFACE | SDL_SRCALPHA,[以下省略] 改为 SDL_CreateRGBSurface(0,[以下省略]
理由是新版文档如此规定的= =
*6 我编译的时候还两个M_PI重复定义的问题,看起来不严重,就是精度有点区别。
==================================================================
把这几处改掉,就可以链接SDL HG/2.0 来编译SDL_gfx了。
sdl用了一年,感觉还是挺小众的东西(资料太少啦!外国人都没几个讨论SDL的!),做游戏所需的很多必备功能都靠别人实现(缩放旋转图像什么的)。当然,SDL的重点是跨平台,当初我就是因为被跨平台的玩家重制版SDL仙剑所吸引,所以开始学SDL的嘛。而且SDL也不光是为游戏服务的,嗯嗯,我懂的,不是SDL不好……
J2ME之后是SDL,我在简单的2D小游戏领域里窝了这么久,也该去大世界透透气了。下一步,去了解一下DirectX(几比较好呢,求推荐>_<),网络通信,sqlite数据库什么的吧~ 垂涎许久的ygocore/ygopro,也该做点什么去靠近它所在的高度啦~
SDL_CreateRGBSurface(SDL_SWSURFACE | SDL_HWSURFACE | SDL_SRCALPHA,
charWidth, charHeight, 32,