• 使用SDL打造游戏世界之入门篇 3


     下面我们正式开始编程,将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基础知识入门专题,或进入讨论组讨论。
  • 相关阅读:
    数学前沿
    线性空间引论(第2版)
    例解回归分析(原书第5版)
    随机过程(原书第2版)
    Windows系统服务器IIS7.5 Asp.net支持10万请求的设置方法
    c# HttpClient禁止缓存
    AngularJs 1.5 $location获取url参数
    Net中HttpClient 重试
    C# 内存信息
    EntityFramework Core 封装
  • 原文地址:https://www.cnblogs.com/Henrya2/p/1420863.html
Copyright © 2020-2023  润新知