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

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

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

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

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

 1 Game::Game()
 2     : _initialized(false), _state(UNINITIALIZED), _pausedCount(0),
 3       _frameLastFPS(0), _frameCount(0), _frameRate(0), _width(0), _height(0),
 4       _clearDepth(1.0f), _clearStencil(0), _properties(NULL),
 5       _animationController(NULL), _audioController(NULL),
 6       _physicsController(NULL), _aiController(NULL), _audioListener(NULL),
 7       _timeEvents(NULL), _scriptController(NULL), _scriptTarget(NULL)
 8 {
 9     GP_ASSERT(__gameInstance == NULL);
10
11     __gameInstance = this;
12     _timeEvents = new std::priority_queue<TimeEvent, std::vector<TimeEvent>, std::less<TimeEvent> >();
13 }
14
15 Game::~Game()
16 {
17     SAFE_DELETE(_scriptTarget);
18     SAFE_DELETE(_scriptController);
19
20     // Do not call any virtual functions from the destructor.
21     // Finalization is done from outside this class.
22     SAFE_DELETE(_timeEvents);
23 #ifdef GP_USE_MEM_LEAK_DETECTION
24     Ref::printLeaks();
25     printMemoryLeaks();
26 #endif
27
28     __gameInstance = NULL;
29 }
30
31 Game* Game::getInstance()
32 {
33     GP_ASSERT(__gameInstance);
34     return __gameInstance;
35 }

 1     /**
 2      * Constructor.
 3      */
 4     Game();
 5
 6     /**
 7      * Destructor.
 8      */
 9     virtual ~Game();
10
11     /**
12      * Gets the single instance of the game.
13      *
14      * @return The single instance of the game.
15      */
16     static Game* getInstance();

 1 #define DISPATCH_EVENT(dispatch, count, eventName, ...) { \
 2     for (int i = 0; i < count; i++) { \
 3         EXECUTE_FUNCTION(dispatch[i], eventName, __VA_ARGS__); \
 4     } \
 5 }
 6
 7 HomuraGame game;
 8
 9 HomuraGame::HomuraGame() : mParticleIndex(3), mGraphicsIndex(1), pFont(NULL) {
10     memset(pParticle, 0, MAX_HOMURA_SIZE * sizeof(Homura*));
11     memset(pGraphics, 0, MAX_HOMURA_SIZE * sizeof(Homura*));
12     memset(pPhysical, 0, MAX_HOMURA_SIZE * sizeof(Homura*));
13 }

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

 1 class HomuraGame : public Game {
 2 public:
 3     HomuraGame();
 4
 5     /**
 6      * @see Game::initialize
 7      */
 8     void initialize();
 9
10     /**
11      * @see Game::finalize
12      */
13     void finalize();
14
15     /**
16      * @see Game::update
17      */
18     void update(float elapsedTime);
19
20     /**
21      * @see Game::render
22      */
23     void render(float elapsedTime);
24
25     void resizeEvent(unsigned int width, unsigned int height);
26
27     void keyEvent(Keyboard::KeyEvent evt, int key);
28
29     void touchEvent(Touch::TouchEvent evt, int x, int y, unsigned int contactIndex);
30
31     bool mouseEvent(Mouse::MouseEvent evt, int x, int y, int wheelDelta);
32
33     static HomuraGame* getInstance();

gameplay理解相关推荐

  1. What is Gameplay

    Gameplay is the specific way in which players interact with a game.游戏玩法(Gameplay)是指玩家玩游戏的过程,它强调这个过程之 ...

  2. UE4入门学习3:GamePlay框架

    - - 文章 UE4入门学习3:GamePlay框架 作者 游蓝海( http://blog.csdn.net/you_lan_hai ) UE4为游戏开发提供了一套基础的框架,在这套框架的基础上,我 ...

  3. 《InsideUE4》GamePlay 架构(二)Level 和 World

    我发现了新大陆! 引言 上文谈到Actor和Component的关系,UE利用Actor的概念组成一片游戏对象森林,并利用Component组装扩展Actor的能力,让世界里拥有了形形色色的Actor ...

  4. UE4:浅谈什么是GamePlay框架

    世界大纲那里的gamemode下面的选项就可以看成是一个gameplay框架的具体体现 首先是GameMod,它是指游戏模式,一个游戏可能有多个模式,比如一个关卡是一个模式,一个游戏大厅来说又是一个模 ...

  5. 【UE4】GamePlay框架简介(蓝图)

    文章目录 GamePlay框架简介 定义 设计者的规则 Game Mode Game State Default Pawn Player Controller Player State HUD Gam ...

  6. 虚幻基础之Gameplay游戏框架之Level和World

    游戏中的虚拟世界是如何组织的呢? 这里,在玩家中流行使用一个词--关卡.玩家们进入关卡,探索关卡内的迷宫,击败关底boss,然后进入下一个关卡,周而复始. 在Unity3D里,这个关卡被称为是Scen ...

  7. 谈谈Gameplay,以及UE4的Gameplay框架

    文章目录 前言 什么是Gameplay Character Camera Control 游戏脚本 介绍脚本语言 脚本系统 UE4 Gameplay框架 介绍重要框架类 Actor类 Componen ...

  8. UE5 Gameplay 框架拆解

    应前辈要求,开始看UE5中关于Gameplay中两个新的特性--Game Feature和Modular Gameplay. 然而我现在连Fortnite的Gameplay Ability系统还没有摸 ...

  9. 《InsideUE4》GamePlay架构学习_Level和World

    <InsideUE4>GamePlay架构学习 Level和World 前话 Unity To UE 思考 为什么AWorldSettings[0]的位置,而ALevelScriptAct ...

最新文章

  1. windows7关闭计算机对话框,电脑弹出对话框很烦人怎么办?win7禁止对话框弹出的方法...
  2. PMCAFF专访:搜狗effevo,这一次我们想连接“人”
  3. 学习Java需要用到什么软件?
  4. 计算string长度 java_夯实基础:掌握从Java 9+开始的String的空间优化
  5. java抽象类异常_求教JAVA里面的错误继承抽象类我都已经看傻了。
  6. python可变参数和关键字参数位置_python 参数笔记 -- 位置参数 关键字参数 命名参数 形式参数 默认参数 可变参数 可选参数 位置顺序...
  7. android digest 认证,探究 Android 签名机制和原理
  8. 【Java】基于栈的括号匹配问题
  9. 在 SQLite3 中使用回调函数
  10. 在python中创建列表的最佳和/或最快方法
  11. python oct_Python oct()
  12. 网站开发中很实用的 HTML5 jQuery 插件
  13. SSD容量也不宜小,最好1T往上
  14. Android设备读写NFC标签
  15. 【触动精灵将图片转成base64字符串后通过post方式上传给服务器】
  16. 深入理解MPU(内存保护单元)
  17. 1.3 可移植性和标准
  18. 201809-2买菜
  19. 不一样的蓝牙连接方式——C#程序实现蓝牙通信
  20. 夜神模拟器+Fiddler抓包测试App

热门文章

  1. 与两位主席复盘IJCAI,今年得失几何?
  2. 科普篇:贝叶斯网络中的置信度传播
  3. 如何理解矩阵的特征向量和特征值?
  4. 机器学习的教训:5家公司分享的错误经验
  5. 头条丨2017年人工智能现七大走向
  6. 干货丨史上最好记的神经网络结构速记表(经典资源,值得收藏)
  7. 顺序Guass消去法求解线性方程组的代码实现
  8. 深度学习助力网络科学:基于深度学习的社区发现最新综述
  9. 混合现实未来的八大应用场景
  10. 你的大脑在自动驾驶,而你一无所知