zoukankan      html  css  js  c++  java
  • 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的什么机制了。

  • 相关阅读:
    Redis学习之(一)
    SpringMVC之学习(0)
    Node.js之Express三
    Node.js之Express二
    Node.js之Express一
    Node.js进程管理之进程集群
    Node.js进程管理之子进程
    Node.js其他模块
    Node.js进程管理之Process模块
    Node.js HTTP Server对象及GET、POST请求
  • 原文地址:https://www.cnblogs.com/lianyue/p/3906917.html
Copyright © 2011-2022 走看看