《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);
       }
   }
相关文章
|
3月前
|
人工智能 JavaScript 前端开发
【利用AI让知识体系化】TypeScript目标:扩展JavaScript能力(二)
【利用AI让知识体系化】TypeScript目标:扩展JavaScript能力
|
3月前
|
人工智能 JavaScript 前端开发
【利用AI让知识体系化】TypeScript目标:扩展JavaScript能力(一)
【利用AI让知识体系化】TypeScript目标:扩展JavaScript能力
|
1月前
|
人工智能 自然语言处理 IDE
被 AI 写的游戏代码砸中是什么感觉 | 10 分钟打造你的超级 AI 编码助手
被 AI 写的游戏代码砸中是什么感觉 | 10 分钟打造你的超级 AI 编码助手
|
2天前
|
人工智能 NoSQL 安全
MongoDB观点:让生成式AI成为业务增长的新动能,游戏公司可以这样做
生成式AI技术将深刻地改变人们的生活和企业运营方式
|
29天前
|
人工智能 JavaScript 前端开发
中国象棋AI在线对弈游戏源码
植物大战僵尸Javascript版web游戏源码,非常强大,1比1还原电脑版植物大战僵尸游戏,带背景音乐,玩法和原版一模一样。
25 0
|
1月前
|
人工智能 移动开发 算法
中国象棋AI在线对弈游戏源码
这是一款html5小游戏,主要功能在于js,带一套皮肤、内置ai算法,有能力的可以自行修改。
69 0
中国象棋AI在线对弈游戏源码
|
1月前
|
人工智能 文字识别 安全
谷歌推出通用AI代理:能自动执行600多种动作,游玩复杂3D游戏
谷歌DeepMind的SIMA项目旨在创建一个通用AI代理,该代理能在多种3D环境中执行复杂任务,通过语言指令与环境交互。目标是让AI理解并执行600多种动作,包括导航和建造等。使用多样化的3D环境训练,结合零基础训练和预训练模型,如SPARC和Phenaki,以增强语言理解和行动执行。评估方法多角度,包括人类评估,但也面临效率和成本挑战。项目注重伦理安全,但AI在复杂环境中的性能仍有提升空间。DeepMind将继续优化代理的鲁棒性,扩大研究范围,以推动通用人工智能的发展。
21 2
谷歌推出通用AI代理:能自动执行600多种动作,游玩复杂3D游戏
|
1月前
|
监控
通过Lua脚本实现禁止员工上班玩游戏的软件的自动化任务管理
使用Lua脚本,企业可以自动化管理员工行为,防止上班时间玩游戏。Lua是一种轻量级脚本语言,适合编写监控任务。示例脚本展示了如何检测工作时间内员工是否玩游戏,并在发现时执行相应操作,如关闭游戏或发送警告。此外,另一脚本演示了如何将监控数据通过HTTP POST自动提交到网站,以实现有效的行为管理。这种解决方案灵活且可定制,有助于提升工作效率。
120 1
|
1月前
|
人工智能 信息无障碍 UED
网易AI Eyes获得iF设计奖,盲人也能“亲眼”玩游戏!
【2月更文挑战第17天】网易AI Eyes获得iF设计奖,盲人也能“亲眼”玩游戏!
34 2
网易AI Eyes获得iF设计奖,盲人也能“亲眼”玩游戏!
|
1月前
|
Java API Maven