Endless Sky源码学习笔记-5
游戏启动后的UI划分为三个区域,左侧滚动显示credits等信息以及偏好设置和退出按钮,中间显示载入动画,右侧显示玩家信息以及载入存档按钮,调用void MenuPanel::Draw()实现。首先画背景,然后画右侧,然后画中间,最后画左侧。左侧和中间的显示信息需要动态更新,有变量scroll(初始为0)和progress(初始为0)来控制滚动和载入进度,在Step()函数中更新值。
载入动画的实现:
载入动画是一个顺时针递增的雨点状小点,间隔6度,60个即载入完成,完成后向内聚拢,最后消失在中心处。要实现该功能需要获取载入进度,包括sprite和audio的载入(二者为并行载入,所以进度按最慢的来计算),在Step()函数中调用double GameData::Progress()获取,二者的进度返回值为0~1的double值,这里转成0~60的int值,变量progress为60后表示载入完成,之后每次调用void MenuPanel::Draw()都会将变量alpha减小0.02(初始为1),根据alpha值调用PointShader设置雨点的位置和颜色,画雨点即循环调用void PointerShader::Draw(const Point ¢er, const Point &angle, float width, float height, float offset, const Color &color),progress每次更新都要重画。
滚动显示的实现:
滚动显示credits信息在载入完成后才会开始,credits信息载入数据时已全部按行存入std::vector<std::string>,滚动显示只需按行读取并显示,滚动速度默认为2个step,循环显示。在滚动区域的上下边界有淡入淡出效果,根据开头是否有空格分层显示,children比parent颜色淡50%,变量y用于记录行的位置,用于判断是否需要渐变、画到第几行、行的颜色和画的位置,画的区域为-165个step<y<115个step,渐变区域为20个step(每step一次scroll加1),每行20个step,总共能同时显示14行((115-(-165))/20),y越小显示位置越高。
Endless Sky源码学习笔记-5的更多相关文章
- Endless Sky源码学习笔记-1
难得遇到一个比较有趣的开源游戏,又是比较偏爱的太空背景,所以打算学习下源码. Endless Sky的作者是Michael Zahniser,是一个2D太空游戏.整个程序比较简洁明了,数据没有打包,游 ...
- Endless Sky源码学习笔记-4
事件处理: 事件包括:debug模式切换.切换到登陆窗口.退出.窗口大小变化.全屏切换和游戏中的鼠标键盘输入.处理方式分为两类,前几个为简单的if处理,最后一个涉及到游戏中的控制和交互,且事件由每一个 ...
- Endless Sky源码学习笔记-3
文本解析: 将txt存入DataFile,DataFile包含DataNode,每个DataNode是txt中的一行,每个DataNode包含若干token(std::vector<string ...
- Endless Sky源码学习笔记-2
数据载入框架: void GameData::BeginLoad(const char * const *argv)为数据载入的最上层method,其主要框架为: void Files::Init(c ...
- 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,则可以进一步 ...
随机推荐
- 尝试打开或创建物理文件 REATE FILE 遇到操作系统错误 5(拒绝访问)
尝试打开或创建物理文件 'E:\Library.mdf' 时,CREATE FILE 遇到操作系统错误 5(拒绝访问.). 最佳回答: 这是因为SQL Server的启动帐户(一般是system或某个 ...
- 在windows编译MariaDB
OS: Windows XP sp3 IDE: VS2010 MariaDB: V5.5 (到目前为止2016.5,中文域(.cn)只有清华大学 TUNA 镜像源可用) (.tar.gz为源码:.zi ...
- 编译WebRTC遇到的问题总结
唉,本人下载WebRTC的代码都用了几天,真的是惭愧,本来以为很简单的东西,没想到搞了这么久,在下载的过程中,心里骂了无数遍XXX,这鬼东西咋这么难搞.后来终于搞明白了为啥代码总是下载不了,然后又在心 ...
- Java集合类简单总结(重学)
java集合类简介(重学) 一.Collection(集合).Map接口两者应该是平行关系吧. 1.Map介绍 Map是以键值(key-value)对来存放的,2个值.通过key来找到value(例: ...
- javascript 中slice,substr,substring方法的对比
实际开发过程中,字符串是一种最常用的一种数据类型,而在程序中对字符串的操作也是十分繁琐,javascript中就提供了很多字符串相关的方法,然而由于方法过多,很多方法功能有交叉,参数有雷同,容易使用混 ...
- JVM内存模型与性能调优
堆内存(Heap) 堆是由Java虚拟机(JVM,下文提到的JVM特指Sun hotspot JVM)用来存放Java类.对象和静态成员的内存空间,Java程序中创建的所有对象都在堆中分配空间,堆只用 ...
- C#遍历字典
C#遍历字典 foreach (KeyValuePair<int, Color> kvp in dic) lst.Add(kvp.Value);
- iOS平台使用陀螺仪传感器
在移动端开发过程中,有时候会用到陀螺仪传感器获取当前手机的姿态,下面给出iOS端如何获取陀螺仪姿态数据的代码: //根据陀螺仪的四元数转换为矩阵 + (GLKMatrix4)calculateMatr ...
- YCSB测试Mysql,MongoDB,TokuMX,Couchbase性能
测试是由同事完成的,这里只做收藏. 测试说明: 1.数据量为3kw记录,每条记录11个字段,一个为主键,主键为字符类型,类似:user****,后续为数值 其他10字段为字符类型,100字符,记录长度 ...
- Debian7下lnmp+gunicorn部署Django运行环境
首先安装lnmp,安装方法见lnmp.org wget -c http://soft.vpser.net/lnmp/lnmp1.3-full.tar.gz && tar zxf lnm ...