首页 > 代码库 > MMORGP大型游戏设计与开发(客户端架构 part8 of vegine)
MMORGP大型游戏设计与开发(客户端架构 part8 of vegine)
脚本模块是游戏设计中争论比较多的话题,那是因为作为脚本本身所带来的利弊。其实这都无关紧要,取舍是人必须学会的一项技能,如果你不会取舍那么就让趋势给你一个满意的答复。自从魔兽世界以及传奇(世界)问世以来,它们都伴随着脚本(LUA)配置,想一想为什么会用到脚本,其根本的原因在于脚本比较方便,改动的时候也无需考虑过多。个人一直坚持使用脚本就在此,另一方面是因其他高级语言,特别是C/C++与它的基本上是无缝的耦合所带来的便利,也成为我选择它的重要原因。
CODE
文件environment.h
/** * PAP Engine ( -- ) * $Id environment.h * @link -- for the canonical source repository * @copyright Copyright (c) 2013-2014 viticm( viticm@126.com ) * @license * @user viticm<viticm@126.com/viticm.ti@gmail.com> * @date 2014-3-19 19:36:10 * @uses vengine script environment module */#ifndef VENGINE_SCRIPT_ENVIRONMENT_H_#define VENGINE_SCRIPT_ENVIRONMENT_H_#include "vengine/config.h"#include "vengine/kernel/node.h"/* use luaplus */namespace LuaPlus {class LuaState;class LuaObject;}; //namespace LuaPlusnamespace vengine_script {class Environment { public: virtual const char* getname() const = 0; virtual int32_t executescript(const char* filename) = 0; virtual void executefunction(const char* functionname, const char* param = NULL) = 0; virtual void executestring(const char* str) = 0; virtual LuaPlus::LuaObject* get_luaobject() = 0;};}; //namespace vengine_script#endif //VENGINE_SCRIPT_ENVIRONMENT_H_
文件system.h
/** * PAP Engine ( -- ) * $Id system.h * @link -- for the canonical source repository * @copyright Copyright (c) 2013-2014 viticm( viticm@126.com ) * @license * @user viticm<viticm@126.com/viticm.ti@gmail.com> * @date 2014-3-19 19:49:05 * @uses vengine script system module */#ifndef VENGINE_SCRIPT_SYSTEM_H_#define VENGINE_SCRIPT_SYSTEM_H_#include "vengine/config.h"#include "vengine/kernel/node.h"#include "vengine/script/environment.h"/* use luaplus */namespace LuaPlus {class LuaState;class LuaObject;}; //namespace LuaPlusnamespace vengine_script {class VENGINE_API System : public vengine_kernel::Node {VENGINE_KERNEL_DECLARE_DYNAMIC(vengine_script_System); public: virtual LuaPlus::LuaState* get_luastate() = 0; //获得lua状态 //创建新的脚本环境 virtual Environment* newenvironment(const char* name, const char* filename) = 0; virtual void destroyenvironment(Environment* environment) = 0; virtual Environment* getenvironment(const char* name) = 0;};}; //namespace vengine_script#endif //VENGINE_SCRIPT_SCRIPT_H_
简述
什么是环境?为什么要有环境?
环境是人类赖以生存的地方,环境决定了许多事情,特别是你能做什么。简单一点,如我们生活的环境,你周围的医疗、商场,这些都是环境中的一部分,可是有些地方没有,这就造成了不同的环境,不同的环境你所能做或是你想做的事就会发生了很大的变化。如你想吃一碗拉面,如果你生活的环境中有提供这样的因素,那么你可以吃到,无论是你自己做还是去食店。可是如果你所处的环境,没有提供你所需的这些因素,那么你就吃不上一碗拉面了。
为了吃上一碗拉面,你必须要具备有吃拉面的环境因素。自然要运行一段脚本代码,你需要有运行该脚本代码的环境才行,当然这个环境需有可能就是你吃不到拉面的环境,因为环境我们可以选择,就像我们为吃一碗拉面,从你生活的地方跑到一个很远的地方一样。
什么是环境创建?为何要得到环境?
经过上面的例子,我想大家知道了为什么要得到这样的环境了,而且代码是个虚拟世界,你的环境可以随心创造,是不是感觉比生活如意多了?
总结
无论是状态机还是运行环境,脚本引擎所能提供给你的只不过是一种执行方法的途径,LUA脚本发展了这么多年,因其小巧出众得到大家的青睐。如果有空的话,我希望各位也看看这方面的知识吧,我在这里就不讲LUA的什么机制了。