Camera视角:确定显示的视场及视角。

Game:显示的基类。静态单例模式。但是获取方式很奇怪。

Game::getInstance得到的是__gameInstance,但是__gameInstance是在Game()构造函数里=this。因此如果没有Game的实例,this就是NULL。

然而使用时,编写继承自Game的子类,如HomuraGame,并且声明HomuraGame的全局变量,这样在加载该so时子类的实例就会创建,同时Game也就会创建。而后调用时Game::getInstance就能得到Game的指针。

这也意味着同一时间只能存在一个Game的实例进行操作。

 Game::Game()
: _initialized(false), _state(UNINITIALIZED), _pausedCount(),
_frameLastFPS(), _frameCount(), _frameRate(), _width(), _height(),
_clearDepth(1.0f), _clearStencil(), _properties(NULL),
_animationController(NULL), _audioController(NULL),
_physicsController(NULL), _aiController(NULL), _audioListener(NULL),
_timeEvents(NULL), _scriptController(NULL), _scriptTarget(NULL)
{
GP_ASSERT(__gameInstance == NULL); __gameInstance = this;
_timeEvents = new std::priority_queue<TimeEvent, std::vector<TimeEvent>, std::less<TimeEvent> >();
} Game::~Game()
{
SAFE_DELETE(_scriptTarget);
SAFE_DELETE(_scriptController); // Do not call any virtual functions from the destructor.
// Finalization is done from outside this class.
SAFE_DELETE(_timeEvents);
#ifdef GP_USE_MEM_LEAK_DETECTION
Ref::printLeaks();
printMemoryLeaks();
#endif __gameInstance = NULL;
} Game* Game::getInstance()
{
GP_ASSERT(__gameInstance);
return __gameInstance;
}
     /**
* Constructor.
*/
Game(); /**
* Destructor.
*/
virtual ~Game(); /**
* Gets the single instance of the game.
*
* @return The single instance of the game.
*/
static Game* getInstance();
 #define DISPATCH_EVENT(dispatch, count, eventName, ...) { \
for (int i = ; i < count; i++) { \
EXECUTE_FUNCTION(dispatch[i], eventName, __VA_ARGS__); \
} \
} HomuraGame game; HomuraGame::HomuraGame() : mParticleIndex(), mGraphicsIndex(), pFont(NULL) {
memset(pParticle, , MAX_HOMURA_SIZE * sizeof(Homura*));
memset(pGraphics, , MAX_HOMURA_SIZE * sizeof(Homura*));
memset(pPhysical, , MAX_HOMURA_SIZE * sizeof(Homura*));
}

而后Game的子类中实现了update和render方法,openGL中每次更新都会调用Game的frame方法,而frame方法会调用update及render方法,从而对动画进行更新。

 class HomuraGame : public Game {
public:
HomuraGame(); /**
* @see Game::initialize
*/
void initialize(); /**
* @see Game::finalize
*/
void finalize(); /**
* @see Game::update
*/
void update(float elapsedTime); /**
* @see Game::render
*/
void render(float elapsedTime); void resizeEvent(unsigned int width, unsigned int height); void keyEvent(Keyboard::KeyEvent evt, int key); void touchEvent(Touch::TouchEvent evt, int x, int y, unsigned int contactIndex); bool mouseEvent(Mouse::MouseEvent evt, int x, int y, int wheelDelta); static HomuraGame* getInstance();

gameplay理解的更多相关文章

  1. 我所理解的Cocos2d-x

    我所理解的Cocos2d-x(完全基于Cocos2d-x3.0,深度剖析计算机图形学,OpenGL ES及游戏引擎架构,全面提升游戏开发相关知识) 秦春林 著   ISBN 978-7-121-246 ...

  2. 《InsideUE4》GamePlay架构(十)总结

    世界那么大,我想去看看 引言 通过对前九篇的介绍,至此我们已经了解了UE里的游戏世界组织方式和游戏业务逻辑的控制.行百里者半九十,前述的篇章里我们的目光往往专注在于特定一个类或者对象,一方面固然可以让 ...

  3. [Unity3D] C# Basic : Gameplay Scripting

    教程:https://unity3d.com/cn/learn/tutorials/s/scripting 补充:http://www.runoob.com/csharp/csharp-inherit ...

  4. 凉鞋:我所理解的框架 【Unity 游戏框架搭建】

    前言 架构和框架这些概念听起来很遥远,让很多初学者不明觉厉.会产生"等自己技术牛逼了再去做架构或者搭建框架"这样的想法.在这里笔者可以很肯定地告诉大家,初学者是完全可以去做这些事情 ...

  5. 理解CSS视觉格式化

    前面的话   CSS视觉格式化这个词可能比较陌生,但说起盒模型可能就恍然大悟了.实际上,盒模型只是CSS视觉格式化的一部分.视觉格式化分为块级和行内两种处理方式.理解视觉格式化,可以确定得到的效果是应 ...

  6. 彻底理解AC多模式匹配算法

    (本文尤其适合遍览网上的讲解而仍百思不得姐的同学) 一.原理 AC自动机首先将模式组记录为Trie字典树的形式,以节点表示不同状态,边上标以字母表中的字符,表示状态的转移.根节点状态记为0状态,表示起 ...

  7. 理解加密算法(三)——创建CA机构,签发证书并开始TLS通信

    接理解加密算法(一)--加密算法分类.理解加密算法(二)--TLS/SSL 1 不安全的TCP通信 普通的TCP通信数据是明文传输的,所以存在数据泄露和被篡改的风险,我们可以写一段测试代码试验一下. ...

  8. node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理

    一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...

  9. 如何一步一步用DDD设计一个电商网站(一)—— 先理解核心概念

    一.前言     DDD(领域驱动设计)的一些介绍网上资料很多,这里就不继续描述了.自己使用领域驱动设计摸滚打爬也有2年多的时间,出于对知识的总结和分享,也是对自我理解的一个公开检验,介于博客园这个平 ...

随机推荐

  1. 我的Python分析成长之路8

    Numpy数值计算基础 Numpy:是Numerical Python的简称,它是目前Python数值计算中最为基础的工具包,Numpy是用于数值科学计算的基础模块,不但能够完成科学计算的任而且能够用 ...

  2. LeetCode(116) Populating Next Right Pointers in Each Node

    题目 Given a binary tree struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode * ...

  3. ACM-ICPC 2018 沈阳赛区网络预赛 F. Fantastic Graph

    "Oh, There is a bipartite graph.""Make it Fantastic." X wants to check whether a ...

  4. 【ORACLE】调整序列的当前种子值

    [ORACLE]调整序列的当前种子值 --必须用SYS用户执行脚本:或具有SYSDBA角色登录: CREATE OR replace ); v_step ):;--步进 tsql ); BEGIN E ...

  5. Knockout v3.4.0 中文版教程-6-计算监控-可写的计算监控

    2.可写的计算监控 初学者可能想要跳过本节 - 可写的计算监控是相当高级的部分,在大多数情况下不是必需的. 通常,计算监控是一个通过其他监控值计算出的值,因此是只读的. 令人惊讶的是,可以使计算监控值 ...

  6. CentOS6.5的安装及忘记root密码的措施

    CentOS6.5的安装及忘记root密码的措施 VMware虚拟机的配置 1.文件->新建->自定义->下一步 2.选择稍后安装操作系统 我们将采用自定义安装,杜绝VMware的一 ...

  7. BASH重定向问题

    APUE 3.5关于重定向有个容易迷惑人的问题: ./a.out > outfile 2>&1 ./a.out 2>&1 > outfile 问两者区别? in ...

  8. [BZOJ1663] [Usaco2006 Open]赶集(spfa最长路)

    传送门 按照时间t排序 如果 t[i] + map[i][j] <= t[j],就在i和j之间连一条边 然后spfa找最长路 #include <queue> #include &l ...

  9. SHoj 420 购买装备

    购买装备 发布时间: 2017年7月9日 18:17   最后更新: 2017年7月9日 21:05   时间限制: 1000ms   内存限制: 128M 描述 最近盛大的一款游戏传奇世界极其火爆. ...

  10. 巴厘岛的雕塑 BZOJ 4069

    巴厘岛的雕塑 题解: 题意是要求分组使每组的和按位取或的值最小 那么考虑贪心,尽量使高位为0 于是枚举位置,从最高位枚举 假设当前枚举到第l位. 令 f[i][j] 表示前 i 个数分成 j 组,满足 ...