难得遇到一个比较有趣的开源游戏,又是比较偏爱的太空背景,所以打算学习下源码。

  Endless Sky的作者是Michael Zahniser,是一个2D太空游戏。整个程序比较简洁明了,数据没有打包,游戏内的物体和任务等都是直接用txt定义,图像和音频分别是png或jpg和wav文件,用到了一些C++11的新功能,所以需要编译器支持该标准。主要依赖为:SDL负责窗口和输入,图像需要OpenGL 3.0+支持(并有texture swizzling功能)以及libpng和libturbojpeg读取图片,声音用OpenAL。

  先从main函数入手,梳理程序运行的大体框架:

    1. 创建空Conversation和PlayerInfo对象;
    2. 初始化窗口;
    3. 载入数据、图像和音频;
    4. 载入存档和个人设置;
    5. 设置窗口大小,初始化GLEW,载入shader,支持高DPI显示器(需下载官方高DPI插件,载入时会自动替换原图像);
    6. 初始化UI,UI由Panel按stack方式储存,从下往上读,事件从上往下传;
    7. 设置帧数为60,设置容许5微秒延迟;
    8. while(!menuPanels.IsDone())内为主循环,其内的while(SDL_PollEvent(&event))为事件处理循环;
    9. 事件处理循环结束后设置下一帧;
    10. 显示当前帧,保持帧数,如果超过延迟限制则跳帧,至此主循环结束;
    11. 退出时如果停在星球上就存档;
    12. 保存个人设置;
    13. 按反创建顺序释放。

Endless Sky源码学习笔记-1的更多相关文章

  1. Endless Sky源码学习笔记-5

    游戏启动后的UI划分为三个区域,左侧滚动显示credits等信息以及偏好设置和退出按钮,中间显示载入动画,右侧显示玩家信息以及载入存档按钮,调用void MenuPanel::Draw()实现.首先画 ...

  2. Endless Sky源码学习笔记-4

    事件处理: 事件包括:debug模式切换.切换到登陆窗口.退出.窗口大小变化.全屏切换和游戏中的鼠标键盘输入.处理方式分为两类,前几个为简单的if处理,最后一个涉及到游戏中的控制和交互,且事件由每一个 ...

  3. Endless Sky源码学习笔记-3

    文本解析: 将txt存入DataFile,DataFile包含DataNode,每个DataNode是txt中的一行,每个DataNode包含若干token(std::vector<string ...

  4. Endless Sky源码学习笔记-2

    数据载入框架: void GameData::BeginLoad(const char * const *argv)为数据载入的最上层method,其主要框架为: void Files::Init(c ...

  5. Underscore.js 源码学习笔记(下)

    上接 Underscore.js 源码学习笔记(上) === 756 行开始 函数部分. var executeBound = function(sourceFunc, boundFunc, cont ...

  6. Underscore.js 源码学习笔记(上)

    版本 Underscore.js 1.9.1 一共 1693 行.注释我就删了,太长了… 整体是一个 (function() {...}());  这样的东西,我们应该知道这是一个 IIFE(立即执行 ...

  7. AXI_LITE源码学习笔记

    AXI_LITE源码学习笔记 1. axi_awready信号的产生 准备接收写地址信号 // Implement axi_awready generation // axi_awready is a ...

  8. Hadoop源码学习笔记(6)——从ls命令一路解剖

    Hadoop源码学习笔记(6) ——从ls命令一路解剖 Hadoop几个模块的程序我们大致有了点了解,现在我们得细看一下这个程序是如何处理命令的. 我们就从原头开始,然后一步步追查. 我们先选中ls命 ...

  9. Hadoop源码学习笔记(5) ——回顾DataNode和NameNode的类结构

    Hadoop源码学习笔记(5) ——回顾DataNode和NameNode的类结构 之前我们简要的看过了DataNode的main函数以及整个类的大至,现在结合前面我们研究的线程和RPC,则可以进一步 ...

随机推荐

  1. 四则运算GUI设计2.0

    使用QT设计的界面如下: 程序流程是点击开始出题,会在题目后面的框中显示所出的题目,在输入答案以后点击提交答案会判断输入的答案是否正确. 输入后的界面: 部分代码如下: qtyunsuan.h文件: ...

  2. 转WCF Proxy Authentication Required

    WCF Proxy Authentication Required The Problem When I’m in the office, I have to use an authenticated ...

  3. html基础 样式

    html样式:本文演示如何在head中添加样式信息使文本格式化 <html> <head> <style type="Text/css"> h1 ...

  4. Python-9 函数

    #1 内建函数 乘方:pow() >>> pow(2,3) 8 >>> 取绝对值:abs() >>> abs(-1) 1 >>> ...

  5. 用 javascript 脚本,网站判读来访者是手机还是电脑

    <script> var system ={}; var p = navigator.platform; system.win = p.indexOf("Win") = ...

  6. js+html5 +devexpress属性总结

    //获取某行某列的值 onSelectionChanged: function (selectedItems) { var data = selectedItems.selectedRowsData[ ...

  7. .net网站能走多远

    刚写好了学校网站,请大家帮忙测试一下.不知道怎么sql注入,或者DDoS攻击,我也是大四什么都是摸索阶段,不过这个网站 做了好长时间了,现在终于可以上架了,希望大家能指点一二,谢谢! 地址:http: ...

  8. C#读取excel数据到datatable中

    DataTable dtGBPatient = new DataTable(); string strConn;string excelName; //注意:把一个excel文件看做一个数据库,一个s ...

  9. 分拆素数和 HDU - 2098

    把一个偶数拆成两个不同素数的和,有几种拆法呢? Input输入包含一些正的偶数,其值不会超过10000,个数不会超过500,若遇0,则结束.Output对应每个偶数,输出其拆成不同素数的个数,每个结果 ...

  10. PostgreSQL 在centos 7下的安装配置

    安装postgresql: sudo yum install postgresql-server 初始化数据库: sudo postgresql-setup initdb 启动数据库: sudo sy ...