事件处理:

  事件包括: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. stickUp让页面元素“固定”位置

    stickUp能让页面目标元素“固定”在浏览器窗口的顶部,即便页面在滚动,目标元素仍然能出现在设定的位置. http://www.bootcss.com/p/stickup/

  2. ODAC学习地址

    http://www.cnblogs.com/ChinaEHR/p/4471920.html

  3. MySQL For Windows修改最大连接数

    1.从官网下载安装MySQL Installer.MySQL Installer 提供了简单易用.向导式的 MySQL 软件的安装体验过程(目前只支持 Windows),包含的产品有: MySQL S ...

  4. vs文件属性(生成操作)各选项功能(发布Web项目时使用)

    转自:http://www.cnblogs.com/paulhe/p/4490583.html 右击项目里的文件,选择属性(F4)会有[生成操作]的选项. 它提供了14项选择,如图: 在这说一下常用的 ...

  5. Error 2103 “Unhandled Error in Silverlight Application“ 解决办法

    当调试SilverLight项目时,如果出现如下错误: 当调试页面时出现如下错误: 解决办法为:打开工程属性,在Startup object:处选择相应的启动应用程序.

  6. Python-4 变量、字符串

    #1 变量 1)使用前 先赋值 2)命名 字母.数字.下划线 且 不由数字开头 3)大小写不等 4)名字=值 5)尽量选取专业的名字 #2 字符串(文本) 1)字符串两边加引号 2)转义字符 \(反斜 ...

  7. ajax学习总结

    一.ajax简介 AJAX即"Asynchronous Javascript And XML"(异步JavaScript和XML),AJAX 是一种与服务器交换数据的技术,他可以在 ...

  8. 网站压力测试工具webbench使用说明

    一.webbench简介        Webbench是有名的网站压力测试工具,它是由Lionbridge公司(http://www.lionbridge.com)开发.它的帮助文件和文档请到:ww ...

  9. AIDL小结

    AIDL : Android Interface Define Language(接口定义语言) Service中跨进程间通信利器.... 一般都会有Client端和Server端(Server端提供 ...

  10. 安卓工程 Installation error:INSTALL_PARSE_FAILED_MANIFEST_MALFORMED的解决办法

    解决办法:把包名首字母改成小写就好了.