banner
Olimi

Olimi

SCUT 小菜鸡
github
bilibili

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

写在前面#

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

事件处理与脚本语言#

事件处理与脚本语言概述#

事件处理#

事件驱动的游戏交互控制:
在这里插入图片描述
游戏引擎的事件处理方式影响着整个引擎架构的设计与风格。事件处理是引擎架构的底层设计,是引擎的两大主线内容之一(另一个是场景管理和渲染渲染)。其中游戏引擎循环架构风格包括三种:

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

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

在这里插入图片描述
在这里插入图片描述
事件处理机制框架示意:
在这里插入图片描述

  • 基于事件更新的交互控制方式
    在这里插入图片描述
  • 视窗消息泵的交互控制方式
    在这里插入图片描述

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

事件处理中的设计思想,观察者模式
在这里插入图片描述
应用观察者模式使得事件与事件处理方法在定义时耦合度较小。

脚本语言#

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

游戏引擎与脚本的关系示意如下:
在这里插入图片描述
其组合方式包括:
在这里插入图片描述
脚本语言的接口定义:
在这里插入图片描述

事件处理实现实例#

OGRE 事件处理#

OGRE 的事件:
在这里插入图片描述
所以 OGRE 的事件处理中核心是处理渲染事件,主要类FrameListener如下:
在这里插入图片描述
进一步地讨论 frameRenderingQueued 帧渲染排队事件:
在这里插入图片描述
OGRE 的渲染事件监听相关类:
在这里插入图片描述
OGRE 中外部事件在OGREBites模块中实现;OGREBites 模块的 ApplicationContext 类是 FrameListener 类的子类,提供有方便的事件监听接口;OGREBites 模块的 InputListener 结构定义了键盘、鼠标、触摸等输入事件的回调函数;OGREBites 模块的其他外部类包括:窗口事件类、GUI 的控件事件类等。

ApplicationContext类与事件处理相关的部分:
在这里插入图片描述

Panda3D 事件处理#

Panda3D 事件处理机制中任务的概念:
在这里插入图片描述
Panda3D 事件的核心类类图:
在这里插入图片描述
任务类之间的关系:
在这里插入图片描述
AsyncTask 类接口:
在这里插入图片描述

事件处理机制和相关类:
在这里插入图片描述
事件处理器的详细解析:
在这里插入图片描述
事件对象定义和处理的一个示例:
在这里插入图片描述

GUI 类:
在这里插入图片描述

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。