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

  • 相关阅读:
    poj 2676 Suduku (dfs)
    poj 1562 Oil Deposits (dfs)
    poj 2907 Collecting Beepers (dfs)
    poj 1655 Balancing Act (树形dfs)
    poj 3411 Paid Roads (dfs)
    hdu 2896 病毒侵袭 (AC)
    hdu 3065 病毒侵袭持续中 (AC)
    poj 2251 Dungeon Master (bfs)
    java中debug使用
    Swing入门级小项目总结
  • 原文地址:https://www.cnblogs.com/lianyue/p/3906917.html
Copyright © 2011-2022 走看看