事件处理:

  事件包括: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. java删除文件

    public boolean deleteFile(String fileName) { File file = new File("D:/NovaPluto/xml/"+file ...

  2. ./upload/source/class/class_core.php

    定义了core这个类 error_reporting(E_ALL); error_reporting() 设置 PHP 的报错级别并返回当前级别.可以参考手册. define('IN_DISCUZ', ...

  3. ZYNQ学习之二-EMIO

    ---恢复内容开始--- 本次试验学习和掌握zynq的emio的使用,是通过PS控制PL端的GPIO. 1.创建硬件工程,主要就是添加EMIO就可以.当然了创建工程的时候还要注意DDR的设置,根据自己 ...

  4. 使用Struts2搭建登录注册示例

    使用Struts2来搭建mvc网站框架还是比较容易的,Struts2提供了各项辅助功能,保证了web开发的快速方便.下面使用struts2来搭建一个登录注册示例. 0 项目结构截图 1 搭建Strut ...

  5. xampp3.2下mysql中文乱码终极解决方案

    xmapp3.2.2中mysql已经被替换成了Mariadb,网上那些显示char语句已经失灵. 另外本文主要介绍的是手动在mysql中写入中文乱码问题 那么我们将采用如下三个步骤解决乱码问题 1.打 ...

  6. HTTP头的Expires与Cache-control

    HTTP头的Expires与Cache-control 1.概念 Cache-control用于控制HTTP缓存(在HTTP/1.0中可能部分没实现,仅仅实现了Pragma: no-cache) 数据 ...

  7. (转)ArcGIS制图技巧

    ArcGIS制图技巧(转载自新浪博客)   1  引言 1.1  制图的目的 随着GIS在各行各业的深入应用,各信息化部门和生产单位都逐渐建立起自己的GIS的应用,同时积累了大量的地理数据.随着应用深 ...

  8. 2015-08-26: GCC编译选项(转载)

    gcc提供了大量的警告选项,对代码中可能存在的问题提出警告,通常可以使用-Wall来开启以下警告:           -Waddress -Warray-bounds (only with -O2) ...

  9. html特殊字符 编码css3 content:"我是特殊符号"

    项目中用到的一些特殊字符和图标 html代码 <div class="cross"></div> css代码 .cross{ width: 20px; he ...

  10. SpringBoot和数据库连接

    就像单机Java应用程序一样,和数据库连接需要DataSource,然后生成到数据库的Connection再进行数据库操作 SpringBoot和原生的JDBC 先看SpringBoot项目源码 从上 ...