MMORPG大型游戏设计与开发(客户端架构 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 LuaPlus

namespace 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 LuaPlus

namespace 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的什么机制了。

posted @ 2014-08-12 11:33  恋月  阅读(1546)  评论(0编辑  收藏  举报