六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 81|回复: 0

Nebula2探秘11-Simple Window

[复制链接]

升级  23.45%

473

主题

473

主题

473

主题

探花

Rank: 6Rank: 6

积分
1469
 楼主| 发表于 2013-1-15 08:04:56 | 显示全部楼层 |阅读模式
Nebula2探秘11-Simple Window

happykevins文

前面的10节主要讲的是Nebula2内核层模块的应用,所以一直在黑黑Dos控制台下工作,可能大家已经非常想念Windows窗口了:) 从本章起,我将开始介绍Nebula2的应用层模块,并以一个最简单的Windows窗口程序开始。虽然简单,但是我们可以从中了解到Nebula2启动一个Windows窗口所需要的依赖,并且也简单的勾画了一个Nebula2的游戏循环。

  代码如下:
<div style="padding-right: 5.4pt; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 4px; width: 95%; padding-top: 4px;">/****************************************************************************/
/*Nebula2-Tutorial11*/
/*CreateSimpleWindowUsingnD3D9Server*/
/*author:happykevins*/
/****************************************************************************/

///----------------------------------------------------------------------------
///+必要头文件

//nebula2includes
#include"kernel/nkernelserver.h"
#include
"kernel/nfileserver2.h"
#include
"gfx2/nd3d9server.h"

//Tutorial工具库:一些通用的宏定义
#include"../NebulaUtils/nutildefs.h"

///-必要头文件
///----------------------------------------------------------------------------

///----------------------------------------------------------------------------
///+链接库
#pragmacomment(lib,"wsock32.lib")
#pragmacomment(lib,"d_nkernel.lib")
#pragmacomment(lib,"d_nnebula.lib")

#pragmacomment(lib,"dxguid.lib")
#pragmacomment(lib,"dxerr9.lib")
#pragmacomment(lib,"d3d9.lib")
#pragmacomment(lib,"d3dx9d.lib")

#pragmacomment(lib,"d_ndirect3d9.lib")
///-链接库
///----------------------------------------------------------------------------

///----------------------------------------------------------------------------
///+声明使用的Nebula2Package&Module
nNebulaUseModule(nresource);
nNebulaUseModule(nresourceserver);
nNebulaUseModule(nfont2);
nNebulaUseModule(nmesh2);
nNebulaUseModule(nmesharray);
nNebulaUseModule(nshader2);
nNebulaUseModule(ntexture2);
nNebulaUseModule(ngfxserver2);
nNebulaUsePackage(ndirect3d9);
///-声明使用的Nebula2Package&Module
///----------------------------------------------------------------------------

///----------------------------------------------------------------------------
///+Application
intmain(intargc,constchar**argv)
{
///创建KernelServer
nKernelServer*ks=n_new(nKernelServer);

///----------------------------------------------------------------------------
///+向KernelServer中添加Package&Module
nNebulaAddModule(nresource);
nNebulaAddModule(nresourceserver);
nNebulaAddModule(nfont2);
nNebulaAddModule(nmesh2);
nNebulaAddModule(nmesharray);
nNebulaAddModule(nshader2);
nNebulaAddModule(ntexture2);
nNebulaAddModule(ngfxserver2);
ks
->AddPackage(ndirect3d9);
///+向KernelServer中添加Package&Module
///----------------------------------------------------------------------------

///创建D3D9Server
nD3D9Server*gfx2=(nD3D9Server*)ks->New("nd3d9server","/sys/servers/gfx");
///创建ResourceServer
nResourceServer*res=(nResourceServer*)ks->New("nresourceserver","/sys/servers/resource");
///获得FileServer设置shaders的路径
nFileServer2*file=(nFileServer2*)ks->Lookup("sys/servers/file2");
///@note:这是启动d3d9server必须的
///因为d3d9server在初始化时会访问"shaders:shape.fx",用它来控制绘制调试图形的渲染状态
file->SetAssign("shaders","bin:../../datafiles/shaders/fixed");

///初始化显示模式
nDisplayMode2mode;
mode.SetXPos(
150);
mode.SetYPos(
100);
mode.SetWidth(
640);
mode.SetHeight(
480);

///将显示模式应用到d3d9server
gfx2->SetDisplayMode(mode);

///启动d3d9server
gfx2->OpenDisplay();

///这里相当于游戏循环,gfx2->Trigger()将触发win32的消息泵
while(gfx2->Trigger())
{
///一帧开始
gfx2->BeginFrame();
///绘制场景开始
if(gfx2->BeginScene())
{
///设置渲染缓冲区
gfx2->Clear(nGfxServer2::AllBuffers,0.2f,0.2f,0.8f,1.0f,0,0);
///绘制场景结束
gfx2->EndScene();
///显示场景
gfx2->PresentScene();
}
///一帧结束
gfx2->EndFrame();
n_sleep(
0.01f);
}

///关闭d3d9server
gfx2->CloseDisplay();

///销毁KernelServer
n_delete(ks);

return0;
}
///-Application
///----------------------------------------------------------------------------
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表