盗賊の極意

Feed Rss

以后再也不在SDL上浪费时间了(外加SDL hg/2.0 编译SDL_gfx的一些注意事项)

07.02.2012, 未分类, by , 11,280 views.

今天又花了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,

以后再也不在SDL上浪费时间了(外加SDL hg/2.0 编译SDL_gfx的一些注意事项) 有 11 条回应

  1. 2012-07-03 在 04:47 D-Horse

    转战android手机游戏了?

    回复
    • 2012-07-03 在 07:17 基拉铃妖

      只是我用的SDL库正好是跨平台的,我想试试。可是,首先android开发我没有仔细研究过,其次这个跨平台需要android的一个更底层的本地开发包NDK(用Cygwin在windows上编译C++代码,然后给android的Java用JNI调用,你说多绕嘴吧…)。这里的NDK我是真的没有用来做过任何东西,完全不懂。linux平台的makefile我也不太熟,不知道哪里链接到了那里没有,最可气的是,我不知道怎么在android程序的C++代码里设置断点调试!连printf这种log函数都不支持,android自己的写log函数我放在main函数第一行都没执行,这我就彻底绝望了啊啊啊啊!

      回复
  2. 我最近也在学android,到时候交流交流。有个nb的老师带我们

    回复
  3. 咋我的头像还是这个黑框框呢。刚设置了一把gravatar。。。

    回复
  4. 2012-07-03 在 17:16 freeknight

    不喜欢SDL,宁可用更破的HGE……起码后者全面一些。跨平台2D引擎其实挺多的话说。
    学DX的话,推荐从DX9.0C熟悉,之后直接DX11,12就好,让DX10去死吧。
    Android平台的话,推荐COCOS2D。我那有中途整理的文档,可以简单了解下,深入了解还要自己看。

    回复
  5. 2012-07-03 在 17:17 freeknight

    用cocosx2d可以在WindowsVC下开发,无代价直接移植Android,IOS上跑。嗯~就素这样推荐。

    回复
    • 2012-07-11 在 21:38 基拉铃妖

      哦,之前在笃志的空间里看到过cocos教程,原来是移动平台上的东西呀
      名字记下了,可以学习学习^_^

      回复
  6. 常言道,越级打怪经验高(兔斯基飞砖)

    回复
  7. 早看见博主的文章好了 我昨天废了一天的时间 测试SDL 以为是我程序问题 原来是SDL问题 靠了

    回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>