A Little Fool

Fool For Free.

博客园 首页 新随笔 联系 订阅 管理
 下面我们正式开始编程,将E:"tutorial"SDL-1.2.8"lib"SDL.dll拷贝到gp文件夹下,然后给gp工程增加一个C++文件main.cpp。如图9所示。

使用SDL打造游戏世界之入门篇(图九)
图9

将以下代码拷贝到main.cpp并保存。

#include <stdlib.h>
#if defined(_MSC_VER)
#include "SDL.h"
#else
#include "SDL/SDL.h"
#endif

SDL_Surface *screen;

void render()
{
// 独占资源,将surface 锁定
if (SDL_MUSTLOCK(screen))
if (SDL_LockSurface(screen) < 0)
return;

// 获取当前时间,以毫秒计时
int tick = SDL_GetTicks();

// 声明变量
int i, j, yofs, ofs;

// 对窗口进行绘制
yofs = 0;
for (i = 0; i < 480; i++)
{
for (j = 0, ofs = yofs; j < 640; j++, ofs++)
{
((unsigned int*)screen->pixels)[ofs] = i * i + j * j + tick;
}
yofs += screen->pitch / 4;
}

// 解除锁定
if (SDL_MUSTLOCK(screen))
SDL_UnlockSurface(screen);

// 使用SDL对窗口进行更新
SDL_UpdateRect(screen, 0, 0, 640, 480);
}

// Entry point
int main(int argc, char *argv[])
{
// 初始化SDL子系统,这里只对视频进行初始化
if ( SDL_Init(SDL_INIT_VIDEO) < 0 )
{
fprintf(stderr, "Unable to init SDL: %s"n", SDL_GetError());
exit(1);
}

// 注册SDL_Quit,当退出时调用,使得退出时程序自动清理
atexit(SDL_Quit);

// 使用32位象素创建640x480的窗口
screen = SDL_SetVideoMode(640, 480, 32, SDL_SWSURFACE);

// 若失败,则退出
if ( screen == NULL )
{
fprintf(stderr, "Unable to set 640x480 video: %s"n", SDL_GetError());
exit(1);
}

// 主循环
while (1)
{
// Render stuff
render();

// SDL中的事件轮询机制
SDL_Event event;
while (SDL_PollEvent(&event))
{
//对消息进行处理
switch (event.type)
{
// 如果按下某键的消息响应
case SDL_KEYDOWN:
break;
//如果某键按下后弹起的消息响应
case SDL_KEYUP:
//若按下ESC键,则退出
if (event.key.keysym.sym == SDLK_ESCAPE)
return 0;
break;
//退出消息响应
case SDL_QUIT:
return(0);
}
}
}
return 0;
}

对工程gp进行编译,可以看看动态水波纹的效果了:) 如图10所示。

使用SDL打造游戏世界之入门篇(图十)
图10

如果你能够看到图10中的美丽动态窗口,那么恭喜你,你可以开始漫游SDL的精彩世界了。下面我们将正式开始我们的SDL之旅。 更多文章 更多内容请看游戏开发网络游戏攻略Solaris基础知识入门专题,或进入讨论组讨论。
posted on 2009-03-24 21:00  HenryRead  阅读(869)  评论(0编辑  收藏  举报