Endless Sky源码学习笔记-2
数据载入框架:
void GameData::BeginLoad(const char * const *argv)为数据载入的最上层method,其主要框架为:
- void Files::Init(const char * const *argv)获取数据储存目录,包括images、data、sounds、plugins和存档,其中images、data、sounds为程序目录下的,不包含plugins内的;
- void GameData::LoadSources()获取plugins目录下的插件目录,插件目录下可包含images、data和sounds三个目录;
- void GameData::LoadImages(map<string, string> &images)载入图像,key为文件名,value为文件全路径,文件名唯一,plugins下的会覆盖默认的,land是飞船登录星球时显示的图片,添加到std::multimap<const Sprite *, pair<string, string>>,其他的载入到SpriteQueue(吐槽下New China的图片,那雾霾啊);
- 循环调用void GameData::LoadFile(const string &path, bool debugMode)载入data目录下的txt,data是按node和token方式存储的,包含层次关系,至此所有星球系统载入完毕;
- 循环调用void System::UpdateNeighbors(const Set<System> &systems)确定系统间的相邻关系,飞船有两种跨系统运动方式,Hyperdrive和 Jump Drive,Hyperdrive需要系统间有link存在,这个在游戏中是一条线,Jump Drive不用管link,不过有某种限制,但是实际游戏中Jump Drive除了去没有link的系统有用,其他时候并不见得比Hyperdrive快,反而燃料消耗很大,具体待查;
- 循环调用void Ship::FinishLoading()载入飞船,飞船由两部分组成——船体和装备,装备包括武器、引擎、系统、能源和其他小东西;
- 载入NPC的飞船,这个飞船和人物是一一对应的,且NPC不重复,会在游戏中随机出现;
- 保存当前状态,重置政治关系。
音频载入框架:
void Audio::Init(const vector<string> &sources)为载入音频的最上层method,const vector<string> &GameData::Sources()获取所有资源的目录(包含images、data、sounds的目录),主要框架为:
- 初始化音频设备,朝向设置会影响确定左右;
- 获取当前线程ID;
- 循环获取所有音频文件,存入std::vector<string>;
- 创建载入线程,储存音频名到std::set<string>,音频名去掉了后缀和路径以及循环播放符号,载入音频到std::map<string, Sound>,key为音频名,value为音频对象, void Sound::Load(const string &path)将音频存入buffer。
存档载入框架:
包括玩家游戏中的数据和个人设置,储存在配置文件夹内(包含有plugins和saves文件夹),主要包括:
- void PlayerInfo::LoadRecent()载入最近存档,在配置文件夹内有一个recent.txt(载入数据的时候没有会新建)用来记录最近存档位置,然后调用void PlayerInfo::Load(const string &path)载入该存档;
- void PlayerInfo::ApplyChanges()将存档内容载入到游戏中;
- void Preferences::Load()载入个人设置,上面这些都需要解释txt文件。
Shader载入框架:
Void GameData::LoadShaders()载入shaders,实际还包括了字体和键盘功能映射。Shader主要包括Fill、Fog、Line、Outline、Point、Ring、Sprite六种。最后载入星空背景,主要为一个黑色图片加随机分布的亮点,分布并不均匀,周期为4096个像素。
UI初始化框架:
UI分为menuPanels(游戏登录)和gamePanels(游戏中),均由panel按stack方式储存,是作为管理类来管理panel的显示和事件处理。void UI::Push(Panel *panel)将panel加入std::vector<std::shared_ptr<Panel>>,这里首先建立登录界面,包含credits和玩家基本资料,加入的panel为MenuPanel,包含有指向player和gamePanels的指针,credits在主目录下的txt中,会滚动显示在左边的panel里,按行存入std::vector<std::string> 中。
Endless Sky源码学习笔记-2的更多相关文章
- Endless Sky源码学习笔记-1
难得遇到一个比较有趣的开源游戏,又是比较偏爱的太空背景,所以打算学习下源码. Endless Sky的作者是Michael Zahniser,是一个2D太空游戏.整个程序比较简洁明了,数据没有打包,游 ...
- Endless Sky源码学习笔记-5
游戏启动后的UI划分为三个区域,左侧滚动显示credits等信息以及偏好设置和退出按钮,中间显示载入动画,右侧显示玩家信息以及载入存档按钮,调用void MenuPanel::Draw()实现.首先画 ...
- Endless Sky源码学习笔记-4
事件处理: 事件包括:debug模式切换.切换到登陆窗口.退出.窗口大小变化.全屏切换和游戏中的鼠标键盘输入.处理方式分为两类,前几个为简单的if处理,最后一个涉及到游戏中的控制和交互,且事件由每一个 ...
- Endless Sky源码学习笔记-3
文本解析: 将txt存入DataFile,DataFile包含DataNode,每个DataNode是txt中的一行,每个DataNode包含若干token(std::vector<string ...
- Underscore.js 源码学习笔记(下)
上接 Underscore.js 源码学习笔记(上) === 756 行开始 函数部分. var executeBound = function(sourceFunc, boundFunc, cont ...
- Underscore.js 源码学习笔记(上)
版本 Underscore.js 1.9.1 一共 1693 行.注释我就删了,太长了… 整体是一个 (function() {...}()); 这样的东西,我们应该知道这是一个 IIFE(立即执行 ...
- AXI_LITE源码学习笔记
AXI_LITE源码学习笔记 1. axi_awready信号的产生 准备接收写地址信号 // Implement axi_awready generation // axi_awready is a ...
- Hadoop源码学习笔记(6)——从ls命令一路解剖
Hadoop源码学习笔记(6) ——从ls命令一路解剖 Hadoop几个模块的程序我们大致有了点了解,现在我们得细看一下这个程序是如何处理命令的. 我们就从原头开始,然后一步步追查. 我们先选中ls命 ...
- Hadoop源码学习笔记(5) ——回顾DataNode和NameNode的类结构
Hadoop源码学习笔记(5) ——回顾DataNode和NameNode的类结构 之前我们简要的看过了DataNode的main函数以及整个类的大至,现在结合前面我们研究的线程和RPC,则可以进一步 ...
随机推荐
- c++容器
1.vector:实质是动态堆数组,连续存储的内存区域,支持快速的随机访问. 2.list:实质是双向循环链表,支持在中间进行快速的插入删除,但是不能支持快速的随机访问.非连续的内存区域. 3.deq ...
- 配置SSH框架的心得
开发工具为myeclipse,开发工具自带struts2,hibernate,spring框架的导入.在新建的项目上右击Myeclipse->Project Facets->Install ...
- Java集合框架(常用类) JCF
Java集合框架(常用类) JCF 为了实现某一目的或功能而预先设计好一系列封装好的具有继承关系或实现关系类的接口: 集合的由来: 特点:元素类型可以不同,集合长度可变,空间不固定: 管理集合类和接口 ...
- bash 相关的一些小代码片断
批量修改文件名: for i in *.html; do mv $i ${i/oldstring/newstring}; done; 批量替换文件内容: sed -i "s/oldstrin ...
- <读书笔记>软件调试之道 :从大局看调试-零容忍策略
声明:本文档的内容主要来源于书籍<软件调试修炼之道>作者Paul Butcher,属于读书笔记.欢迎转载! ---------------------------------------- ...
- Android Activity 四种启动模式
task和back stack(任务和回退栈) 任务启动,task被加入到回退栈的栈顶,返回的时候回退栈的栈顶任务会被弹出,并被销毁,栈中的前一任务恢复运行,当activity销毁是,系统不会保留ac ...
- 浅析tomcat nio 配置
[尊重原创文章摘自:http://blog.csdn.net/yaerfeng/article/details/7679740] tomcat的运行模式有3种.修改他们的运行模式.3种模式的运行是否成 ...
- TCP应用编程
TCP是Transmission Control Protocol(传输控制协议)的简称,是TCP/IP体系中面向连接的运输层协议,在网络中提供全双工的和可靠的服务. TCP协议最主要的特点是: 1) ...
- 这是个简单的UTF8转码的小Demo
NSString *name = @"你好啊"; NSString *string = [NSString stringWithFormat:@"%@",nam ...
- CSS背景 顶上 顶下之类详解
background: url(../images/img17.jpg)no-repeat 0px opx ; 背景的第一个属性石左右值,第二个数字是上下值 举个案例,比如图片只有1400宽300高, ...