事件处理:

  事件包括:debug模式切换、切换到登陆窗口、退出、窗口大小变化、全屏切换和游戏中的鼠标键盘输入。处理方式分为两类,前几个为简单的if处理,最后一个涉及到游戏中的控制和交互,且事件由每一个panel来处理,包括快捷键以及鼠标单击、悬停、拖动和滚动,而不同的panel对同一事件的响应不尽相同,所以Panel类事件处理的函数大多时虚函数,由不同panel继承后重写。多数事件处理时会改变UI,所以需要push/pop相应的panel到stack,统一由void UI::PushOrPop()

处理,这就需要先将每个panel的push/pop存储起来,所以用两个std::vector来存储需要push/pop的panel,然后在void UI::PushOrPop()依次在stack中加入或弹出。需要注意的是不管是erase还是clear只是删除指针,不会删除指向的对象。事件主要有:

  1. Drag,拖动,需按下鼠标左键并移动。
  2. Hover,悬停,需移动鼠标。
  3. ZoneClick,触发区域响应,需在定义的范围内左键单击鼠标。
  4. Click,左键单击响应,需在某一位置左键单击鼠标。
  5. RClick,右键单击响应,需在某一位置右键单击鼠标。
  6. Release,释放响应,需在某一位置释放已单击的鼠标。
  7. Scroll,滚轮响应,需滚动鼠标滚轮。
  8. KeyDown,键盘响应,需按下某按键。

储存个人设置和游戏进度:

  游戏会在特定的时刻储存进度,包括:玩家在星球上时退出游戏,玩家在星球上时呼出载入界面,玩家离开星球,玩家接受的任务要求自动存档。实际上进度只能在登陆星球后才能储存。首先要更新recent.txt中的存档位置,然后比较当前游戏时间是否在已有最新存档里的游戏时间之后,若是则将当前状态存档,并更新3个snapshot存档。实际存档是由 void PlayerInfo::Save(const string &path) const 完成,写入到最新存档,所以除了最新存档需要该函数写,其他的snapshot都是从上一个中复制。存档中的内容非常多,按缩进确定层次关系,以key-value的形势写入txt。有几个数据比较多的需要调用自己的save函数,避免PlayerInfo访问其他类的成员,包括玩家的飞船、货物、银行账户、任务(这个比较复杂)、事件和物价。个人设置的储存同上。

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

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

    难得遇到一个比较有趣的开源游戏,又是比较偏爱的太空背景,所以打算学习下源码. Endless Sky的作者是Michael Zahniser,是一个2D太空游戏.整个程序比较简洁明了,数据没有打包,游 ...

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

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

  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. FreeBSD从零开始---安装后配置(一)

    一.安装后配置   上次我们说到FreeBSD的安装,这次我们说FreeBSD安装后的配置和简单优化方法.   安装完BSD只是服务器提供服务这条万里长征路的开始,还需要一些基本的设定和优化.不过实际 ...

  2. jquery的blur之后,focus获取不到焦点的解决办法

    一:很多童鞋可能会遇到这种情况: jquery的blur之后,focus获取不到焦点. 二:使用场景: 用户填写信息的时候,若邮箱为空,则提示 请填写邮箱,并将光标置于填写邮箱的文本框里,方便用户的再 ...

  3. system verilog中的跳转操作

    在verilog中,使用disable声明来从执行流程中的某一点跳转到另一点.特别地,disable声明使执行流程跳转到标注名字的声明组末尾,或者一个任务的末尾. verilog中的disable命令 ...

  4. Webservice简介

    一.序言 大家或多或少都听过WebService(Web服务),有一段时间很多计算机期刊.书籍和网站都大肆的提及和宣传WebService技术,其中不乏很多吹嘘和做广告的成分.但是不得不承认的是Web ...

  5. js工厂方式和构造函数

    工厂方式 //工厂方式 : 封装函数 function createPerson(name){ //1.原料 var obj = new Object(); //2.加工 obj.name = nam ...

  6. CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files 解决方案

    1 设置c:windows\temp 目录访问权限 temp--> 属性-->安全-- > 添加network service -->并赋予其权限为 读 和 写--> 确 ...

  7. AngularJS 2 Typescript 相关

    1. Angular 2 In 60 Minutes (2016年11月23日) https://www.youtube.com/watch?v=-zW1zHqsdyc 2. AngularJS Cl ...

  8. Python自动化 【第十八篇】:JavaScript 正则表达式及Django初识

    本节内容 JavaScript 正则表达式 Django初识 正则表达式 1.定义正则表达式 /.../  用于定义正则表达式 /.../g 表示全局匹配 /.../i 表示不区分大小写 /.../m ...

  9. NodeJs解析web一例

    var http = require('http'); var fs = require('fs'); var url = require('url'); http.createServer(func ...

  10. SpringMVC学习笔记(四)

    一.Controller接受网页参数. 1.使用方法的形参来接受 //使用基本类型和字符串来接受 @RequestMapping(value="/param2.do") publi ...