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

写在前面

本专栏内容均为学堂在线慕课《3D游戏引擎架构设计基础》中的内容。个人将其转化成文字和图片的版本(个人更加喜欢文字版本的教程,阅读速度更快很多),方便查阅。
原课程链接:3D游戏引擎架构设计基础

事件处理与脚本语言

事件处理与脚本语言概述

事件处理

事件驱动的游戏交互控制:
3D游戏引擎入门课程——事件处理与脚本语言
游戏引擎的事件处理方式影响着整个引擎架构的设计与风格。事件处理是引擎架构的底层设计,是引擎的两大主线内容之一(另一个是场景管理和渲染渲染)。其中游戏引擎循环架构风格包括三种:

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

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

3D游戏引擎入门课程——事件处理与脚本语言
3D游戏引擎入门课程——事件处理与脚本语言
事件处理机制框架示意:
3D游戏引擎入门课程——事件处理与脚本语言

  • 基于事件更新的交互控制方式
    3D游戏引擎入门课程——事件处理与脚本语言
  • 视窗消息泵的交互控制方式
    3D游戏引擎入门课程——事件处理与脚本语言

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

事件处理中的设计思想,观察者模式
3D游戏引擎入门课程——事件处理与脚本语言
应用观察者模式使得事件与事件处理方法在定义时耦合度较小。

脚本语言

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

游戏引擎与脚本的关系示意如下:
3D游戏引擎入门课程——事件处理与脚本语言
其组合方式包括:
3D游戏引擎入门课程——事件处理与脚本语言
脚本语言的接口定义:
3D游戏引擎入门课程——事件处理与脚本语言

事件处理实现实例

OGRE事件处理

OGRE的事件:
3D游戏引擎入门课程——事件处理与脚本语言
所以OGRE的事件处理中核心是处理渲染事件,主要类FrameListener如下:
3D游戏引擎入门课程——事件处理与脚本语言
进一步地讨论frameRenderingQueued帧渲染排队事件:
3D游戏引擎入门课程——事件处理与脚本语言
OGRE的渲染事件监听相关类:
3D游戏引擎入门课程——事件处理与脚本语言
OGRE中外部事件在OGREBites模块中实现;OGREBites模块的ApplicationContext类是FrameListener类的子类,提供有方便的事件监听接口;OGREBites模块的InputListener结构定义了键盘、鼠标、触摸等输入事件的回调函数;OGREBites模块的其他外部类包括:窗口事件类、GUI的控件事件类等。

ApplicationContext类与事件处理相关的部分:
3D游戏引擎入门课程——事件处理与脚本语言

Panda3D事件处理

Panda3D事件处理机制中任务的概念:
3D游戏引擎入门课程——事件处理与脚本语言
Panda3D事件的核心类类图:
3D游戏引擎入门课程——事件处理与脚本语言
任务类之间的关系:
3D游戏引擎入门课程——事件处理与脚本语言
AsyncTask类接口:
3D游戏引擎入门课程——事件处理与脚本语言

事件处理机制和相关类:
3D游戏引擎入门课程——事件处理与脚本语言
事件处理器的详细解析:
3D游戏引擎入门课程——事件处理与脚本语言
事件对象定义和处理的一个示例:
3D游戏引擎入门课程——事件处理与脚本语言

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