posts - 126,  comments - 73,  trackbacks - 0
  首先,我们为所有的工程创建一个文件夹tutorial,将下载的开发库SDL-devel-1.2.8-VC6.zip拷贝到tutorial下并解压,并保证如下的文件夹层次(图2)如下:


图2

  下面我们打开Visual Studio6.0,开发一个非常简单的小例子。选择File->New,新建一个工程,选择Win32 Application,将工程gp保存为tutorial目录下,如图3所示。


图3

  在图4中,保持默认设置,点击Finish。


图4

  为了使用SDL,我们需要进行相关的设置,选择Project->Settings...,选择C/C++属性页,在Category中选择Code Generation,在Use run-time library中选择Debug Multithreaded DLL,如图5所示。


图5

  在Category中选择Preprocessor,在'Additional include directories'的文本框中填上..\SDL-1.2.8\include\,如图6所示。


图6

  选择Link属性页,在'Object/library modules'文本框的首部增加SDLmain.lib和sdl.lib,如图7所示。


图7

  仍然是Link属性页,选择Category中的Input,在'Additional library path'文本框中填写..\SDL-1.2.8\lib\,如图8所示。


图8

  这样我们就完成了编程前的设置工作,不过这是针对Debug版本的,如果要设置Release版本,需要选择Build->Set Active Configuration,选择Release,然后再次如上配置一次。

下面我们正式开始编程,将E:\tutorial\SDL-1.2.8\lib\SDL.dll拷贝到gp文件夹下,然后给gp工程增加一个C++文件main.cpp。如图9所示。


图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所示。


图10

  如果你能够看到图10中的美丽动态窗口,那么恭喜你,你可以开始漫游SDL的精彩世界了。下面我们将正式开始我们的SDL之旅。
posted on 2010-08-11 10:35 我风 阅读(1627) 评论(0)  编辑 收藏 引用 所属分类: SDL

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2010年8月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234

常用链接

留言簿(12)

随笔分类

随笔档案

文章档案

相册

收藏夹

C++

MyFavorite

搜索

  •  

积分与排名

  • 积分 - 312414
  • 排名 - 73

最新评论

阅读排行榜

评论排行榜