n2初识系列之1

n2的基本架构是这样的(从上至下):

具体的应用程序,一般是我们编制的程序.

nebula class 层(主要提供具体任务的一些编程结构,粒子,纹理,以及动画等)

server层(由各种各样的服务器组成,他们一般都是完成一些常见的任务,比如渲染,输入控制以及运行脚本等)

Kernel 层(创建nebula 对象,并且负责kernel层次的工作,比如内存管理,线程,定时器,文件系统,产生和释放对象等这样的事情)

os(渲染API,封装了D3D以及OPENGL) 

一些补充:  1 应用程序在运行的时候,Kernel层将最先被创建.

                  2 server层拥有许多服务器,是按照模块化的思想进行设计的,这样使得各个服务器变得更加好管理和维护.

如何编译N2?

之前我在编译的时候经常出错,后来就一度放弃了.

现在采用了appwiard,来生成一个工程,按照wizard上面的提示进行一些操作,在进行第一个界面的时候,这个时候要选择一个路径,最好要创建一个文件夹什么的.那么这个appwizard生成的文件都将保存在这个文件里面.这个文件夹主要保存的是,bldfiles,inc,以及 src.这个bldfiles里面主要的包含一个bld文件,这个bld文件主要是配置这个工程的信息.

beginmodule asclass
    setdir msubdir
    setfiles { 
        asclass_main
        asclass_cmds
    }
    setheaders { asclass }
endmodule
#-----------------------------------------------------------------------------
beginmodule acname
    setdir msubdir
    setfiles {
        acname_main
        acname_cmds
    }
    setheaders { acname }
endmodule
#-----------------------------------------------------------------------------
beginmodule aname
    setdir msubdir
    setfiles { aname }
endmodule
#-----------------------------------------------------------------------------
begintarget tname
    annotate "Insert a brief annotation of the target"
    settype exe
    setmodules {
        asclass
        acname
        aname
    }
    settargetdeps {
        nkernel
        nnebula
        microtcl
        ndinput8
        ndirect3d9
        ndshow
        ndsound
        ngui
        nnetwork
        napplication
        npythonserver
    }
endtarget
#-----------------------------------------------------------------------------
beginworkspace tname
    settargets {
        tname
        nkernel
        nnebula
        microtcl
        ndinput8
        ndirect3d9
        ndshow
        ndsound
        ngui
        nnetwork
        napplication
        npythonserver
    }
endworkspace      

      

这里是个很好的比照,asclass对应beginmodule asclass,里面规定  头文件以及对应的源文件呢.

acname对应beginmodule acname,里面同样规定了对应的 头文件和对应的源文件.

tname对应begintarget tname,里面就对应整个tname工程文件了.

beginworkspace tname,这里面就是要对应的整个工程的.

在这里有点值得说明的是:在编译的时候,选择了pythonserer,所以要在编译这个工程之前先编译npythonserver工程.在编译以后,可能会遇到这样的情况,

编译的时候会说,npythonrun.obj的什么连接错误,(没有记下来,不好意思)

以及npythonserver.obj的连接错误.那么的话,就要做一件事情:

以及

在npythonserver的lib里面要使用这两个全局函数,但是这个两个函数在那个lib里面是没有写真正实现的,要你在其它地方写. (我当时的问题是:)

Linking...
npythonrun.obj : error LNK2019: unresolved external symbol "void __cdecl nPythonInitializeEnvironment(void)" (?nPythonInitializeEnvironment@@YAXXZ) referenced in function "public: virtual bool __thiscall nPythonServer::RunScript(char const *,class nString &)" (?RunScript@nPythonServer@@UAE_NPBDAAVnString@@@Z)
npythonserver.obj : error LNK2019: unresolved external symbol "char const * __cdecl nPythonModuleName(void)" (?nPythonModuleName@@YAPBDXZ) referenced in function "public: __thiscall nPythonServer::nPythonServer(void)" (??0nPythonServer@@QAE@XZ)
../../bin/win32d/tname.exe : fatal error LNK1120: 2 unresolved externals
Build log was saved at "file://f:/precious nehula2 device/nebula device/trunk/nebula2/build/vstudio8/inter/win32d/tname/BuildLog.htm"
tname - 3 error(s), 0 warning(s)

npythonrun是存在的,所以没有不存在的问题.
说明了nPythonInitializeEnvironment和nPythonServer这两个函数,没有定义之类的,但是在npythonhooks里面又存在两个这样的函数,于是要写个自己的实体,"那个函数你要在你自己的工程里面写上实体"感谢gddsky.:)

这样话,就可以确保他顺利编译成功了.

你看npythonhooks.cc文件,你可以将它复制过来,放到你自己建立的工程去. 再次感谢gddsky.

在编译npythonserver成功以后,就要将添加对应的lib到工程里面去.

然后值得补充的一条是:

在编译的时候,要注意添加相应的库文件.

比如:

以及

这里说明的是:1 第一个是将用npythonserver里面编译出来的lib放到additional dependecies上面,具体的位置是tname所对应project property,->configuration->Linker->Input,在additional denpency上面添加就可以了,当然也要添加对应的头文件落,一般在tools->options->vc++directory上面,

2 第二个是对应的library文件,tools->options->vc++directory->library files里面,一般包括了nebula2的依赖lib文件和mangalore的依赖lib文件.当然还有对应的build以后的文件,一般放在buid/vstudio8/inter/win32d里面,这里,所有编译好的lib文件都在这里.当然不能错过了,所有这些都谢谢gddsky,他帮了我很大的忙.

另外因为vc2005已经自带了dx,并且据称他的版本比市面上的DX版本还新,(我不敢肯定,但是一定有这样的事情,所以我一般都用VC2005自带的DX版本).

n2究竟是什么东西,如果将她按照客户端和服务器端划分的话,那么应该归于哪一类呢?

主要是做为client的呢,但是因为有了nnetwork的插件,也可以做成server了,nnetwork有sessionsServer与netServer,看起来应该是支持两种模式,一种P2P一种是CS. --gddsky.

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值