《Lua游戏AI开发指南》一2.3 扩展SandboxApplication类

简介:

本节书摘来异步社区《Lua游戏AI开发指南》一书中的第2章,第2.3节,作者: 【美】David Young(杨) 译者: 王磊 责编: 陈冀康,更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.3 扩展SandboxApplication类

项目创建好之后,你需要为Premake创建3个空白文件。创建如下的源文件和头文件:

src/my_sandbox/include/MySandbox.h 
  src/my_sandbox/src/MySandbox.cpp 
  src/my_sandbox/src/main.cpp

现在就可以运行vs2008.bat、vs2010.bat、vs2012.bat或者vs2013.bat来重新生成Visual Studio解决方案了。然后,当打开这个解决方案时,你就能看到新的my_sandbox项目了。

每个沙箱示例程序都需要扩展SandboxApplication基础类来声明可执行的Lua脚本的位置。

遵照下面的模式来声明你的MySandbox类:

MySandbox.h:

   #include "demo_framework/include/SandboxApplication.h"

   class MySandbox : public SandboxApplication { 
   public:
       MySandbox(void);

       virtual ~MySandbox(void);

       virtual void Initialize();
   };

继承SandboxApplication类可以提供一些基础的功能。目前我们只需要重载Initialize函数来添加Lua脚本资源的路径。

继承SandboxApplication还能重载Update和Cleanup等函数。任何其他的C++代码都可以通过这些函数注入到主应用程序中。

当重载这些函数时,你总是应该调用Sandbox Application基类的原始实现,因为它们处理了沙箱的清理、初始化和更新等功能。
在沙箱的源文件中,只需要设置沙箱的Lua脚本资源的路径,并调用父类的Initialization函数。

MySandbox.cpp:

   #include "my_sandbox/include/MySandbox.h"

   MySandbox:: MySandbox ()
       : SandboxApplication("My Sandbox") {}

   MySandbox::~ MySandbox () {}

   void MySandbox::Initialize()
       SandboxApplication::Initialize();

       //Relative location from the bin/x32/release/ or
       //bin/x32/debug folders
       AddResourceLocation("../../../src/my_sandbox/script");
   }

最后,你可以在main.cpp文件中添加一点启动代码来开始你的应用程序:

main.cpp:

   #include "my_sandbox/include/MySandbox.h"   
   #include "ogre3d/include/OgreException.h"

   #define WIN32_LEAN_AND_MEAN 
   #include "windows.h"

   int main() {
       MySandbox application;
       try { 
           application.Run();
       }
       catch(Ogre::Exception& error) { 
           MessageBox(
               NULL, 
               error.getFullDescription().c_str(), 
               "An exception has occurred!",
               MB_OK | MB_ICONERROR | MB_TASKMODAL);
       }
   }
相关文章
|
18天前
|
存储 人工智能 缓存
【AI系统】Ascend C 语法扩展
Ascend C 是基于标准 C++ 扩展的编程语言,专为华为昇腾处理器设计。本文介绍了 Ascend C 的基础语法扩展、API(基础与高阶)、关键编程对象(数据存储、任务间通信与同步、资源管理及临时变量),以及如何利用这些特性高效开发。通过华为自研的毕昇编译器,Ascend C 实现了主机与设备侧的独立执行能力,支持不同地址空间的访问。API 包括计算、数据搬运、内存管理和任务同步等功能,旨在帮助开发者构建高性能的 AI 应用。
27 2
【AI系统】Ascend C 语法扩展
|
11天前
|
监控 安全
公司用什么软件监控电脑:Lua 脚本在监控软件扩展功能的应用
在企业环境中,电脑监控软件对保障信息安全、提升效率至关重要。Lua 脚本在此类软件中用于扩展功能,如收集系统信息、监控软件使用时长及文件操作,向指定服务器发送数据,支持企业管理和运营。
29 6
|
1月前
|
存储 人工智能 关系型数据库
拥抱Data+AI|解码Data+AI助力游戏日志智能分析
「拥抱Data+AI」系列第2篇:阿里云DMS+AnalyticDB助力游戏日志数据分析与预测
拥抱Data+AI|解码Data+AI助力游戏日志智能分析
|
1月前
|
人工智能 知识图谱
轻松搭建AI版“谁是卧底”游戏,muAgent框架让知识图谱秒变编排引擎,支持复杂推理+在线协同
蚂蚁集团推出muAgent,兼容现有市面各类Agent框架,同时可实现复杂推理、在线协同、人工交互、知识即用四大核心差异技术功能。
42 2
|
1月前
|
存储 人工智能 关系型数据库
拥抱Data+AI|玩家去哪儿了?解码Data+AI如何助力游戏日志智能分析
本文为阿里云瑶池数据库「拥抱Data+AI」系列连载第2篇,基于真实客户案例和最佳实践,探讨如何利用阿里云Data+AI解决方案应对游戏行业挑战,通过AI为游戏行业注入新的活力。文章详细介绍了日志数据的实时接入、高效查询、开源开放及AI场景落地,展示了完整的Data+AI解决方案及其实际应用效果。
|
2月前
lua面向对象(类)和lua协同线程与协同函数、Lua文件I/O
Lua的面向对象编程、协同线程与协同函数的概念和使用,以及Lua文件I/O操作的基本方法。
37 4
lua面向对象(类)和lua协同线程与协同函数、Lua文件I/O
|
1月前
|
Web App开发 人工智能 自然语言处理
WebChat:开源的网页内容增强问答 AI 助手,基于 Chrome 扩展的最佳实践开发,支持自定义 API 和本地大模型
WebChat 是一个基于 Chrome 扩展开发的 AI 助手,能够帮助用户理解和分析当前网页的内容,支持自定义 API 和本地大模型。
70 0
|
2月前
|
缓存 分布式计算 NoSQL
大数据-43 Redis 功能扩展 Lua 脚本 对Redis扩展 eval redis.call redis.pcall
大数据-43 Redis 功能扩展 Lua 脚本 对Redis扩展 eval redis.call redis.pcall
37 2
|
3月前
|
机器学习/深度学习 人工智能 开发者
谷歌推世界首个AI游戏引擎,2000亿游戏产业恐颠覆!0代码生成游戏,老黄预言成真
【9月更文挑战第22天】谷歌近日推出的AI游戏引擎GameNGen,作为全球首款神经模型驱动的游戏引擎,引发了广泛关注。该引擎使用户无需编写代码即可生成游戏,并实现了与复杂环境的实时交互,显著提升了模拟质量。在单TPU上,GameNGen能以超20帧/秒的速度流畅模拟经典游戏《DOOM》。这项技术不仅简化了游戏开发流程,降低了成本,还为游戏设计带来了更多可能性。然而,它也可能改变游戏产业的商业模式和创意多样性。无论如何,GameNGen标志着游戏开发领域的一次重大革新。
61 2
|
4月前
|
人工智能 数据库 对象存储
就AI 基础设施的演进与挑战问题之创建Ganos FDW扩展并管理CSV文件的问题如何解决
就AI 基础设施的演进与挑战问题之创建Ganos FDW扩展并管理CSV文件的问题如何解决