3D游戏引擎入门课程6——事件处理与脚本语言

事件处理与脚本语言

事件处理与脚本语言概述

事件处理

事件驱动的游戏交互控制：

游戏引擎的事件处理方式影响着整个引擎架构的设计与风格。事件处理是引擎架构的底层设计，是引擎的两大主线内容之一（另一个是场景管理和渲染渲染）。其中游戏引擎循环架构风格包括三种：

回调驱动框架的交互控制方式

其中事件处理是通过回调函数执行的，示例如下：

事件处理机制框架示意：

基于事件更新的交互控制方式

视窗消息泵的交互控制方式

上述的事件处理机制中，回调驱动方式主要适用于窗口或外部输入的设备事件，采用的是事件处理机制；基于事件更新的方式主要适用于场景渲染的帧时间更新，可以用回调函数实现更新；视窗消息泵的方式主要适用于在已有的 GUI 框架中集成交互控制。

事件处理中的设计思想，观察者模式：

应用观察者模式使得事件与事件处理方法在定义时耦合度较小。

脚本语言

指为了缩短传统的编写 - 编译 - 链接 - 运行过程而创建的计算机编程语言，也是一种编译语言的扩展语言。其语法比较简单，与应用程序密切相关，可以直接调用应用程序函数，一般不具备通用性。其特性包括：直译性、轻量、支持快速迭代、方便易用。常见的脚本语言包括：Python、Lua、JavaScript 等。

游戏引擎与脚本的关系示意如下：

其组合方式包括：

脚本语言的接口定义：

事件处理实现实例

OGRE 事件处理

OGRE 的事件：

所以 OGRE 的事件处理中核心是处理渲染事件，主要类FrameListener如下：

进一步地讨论 frameRenderingQueued 帧渲染排队事件：

OGRE 的渲染事件监听相关类：

OGRE 中外部事件在OGREBites模块中实现；OGREBites 模块的 ApplicationContext 类是 FrameListener 类的子类，提供有方便的事件监听接口；OGREBites 模块的 InputListener 结构定义了键盘、鼠标、触摸等输入事件的回调函数；OGREBites 模块的其他外部类包括：窗口事件类、GUI 的控件事件类等。

ApplicationContext类与事件处理相关的部分：

Panda3D 事件处理

Panda3D 事件处理机制中任务的概念：

Panda3D 事件的核心类类图：