---------------------------西昌.何雨锋 类的使用
1-mesh类,mesh是由scene建立出来的,所以要单独建立出一个类就要牵涉到scene,一般甚至都可以不用自己包括scene,要求是
先声明scene的实例,然后在class mesh中直接建立出来就可以了。
但是这种办法不利于.h类的建立,因为事先不知道该在哪个scene中建立,所以
class boat
{ ITVMesh boat_model;
ITVScene scenex;
public:
void set_scene(ITVScene &sceney){scenex=sceney;}
void load_model(char *name_it)
{
boat_model=scenex->CreateMeshBuilder(name_it);
}
};
这样就可以通过接口传递不同的scene而把mesh建立出来了,通过这种手段,可以把mesh类集成到.h文件中。
但是这样建立有一个弊病,就是scenex仍然会占用跟sceney一样多的内存,最好的办法是声明ITVScene *scenex;指针,
后面赋值改为scenex=&sceney;这样第一个指针指向后者,就不会多占用内存了,
只在调用scenex的成员及函数时这样调用:(*scenex)->成员。
其完整的流程如下:
类中:
ITVScene *scenex;
void set_scene(ITVScene &sceney)
{scenex=&sceney;}
(*scenex)->...
2-input类,input类是一个可以独立的类,但是它涉及到了两个其他类的方法:
一个是时间的流逝,如engine1->timeescape();这个由于只是传输一个double型的变量,所以可以用函数传递到类中,如:
void check_io(double timeleft) //在调用时在循环中用input1.check_io(engine1->timeescape());
另一个看起来跟input类无关,那就是scene->setcamera(...);但是很多时候input控制的就是camera,所以就得使用它,但是如果不传递
scene就错了,可能认为可以在类中用引用或成员函数返回三维坐标,再在循环主程序中来setcamera,这被证明是错误的,由于时间上的
误差,所以返回的三维坐标跟不上鼠标的动作,所以必须把scene传进去,然后在input中渲染,才能跟得上动作速度。
void input::init_io(ITVScene scenex)
{
input1 = CreateTVInputEngine();
sceney=scenex;
}
然后再在类里,坐标一算出来就立刻setcamera.当然,如果你要用input来实时控制其他的东西,那么也同样要把其他东西传到input类里了控制比较好。注意别把scene的复制放在input构造函数里进行,而必须等到scene.Createscene()后,再用input.init_io来复制场景。
3-Engine,在TV3D中,唯一不能使用类的就是engine与gobal,当然,不能使用类还是可以使用函数来简化其初始化程序的。
void EngineInit(long winhand,HINSTANCE hin)//初始化engine
{
engine1 = CreateTVEngine();
engine1->SetDebugFile("debug.txt");
engine1->ShowDriverDialog();
engine1->Init3DWindowedMode (winhand, true);
//打开显示FPS开关
engine1->put_DisplayFPS(tvtrue);
//使用角度而非幅度
engine1->SetAngleSystem(TV_ANGLE_DEGREE);
char path[256];
char srchpath[256];
HMODULE Module = (HMODULE)hin;
GetModuleFileName(Module,path,255);
AppPath(path,srchpath);
//设置资源文件的路径
engine1->SetSearchDirectory(srchpath);
}
其中两个参数实际就是窗口的句柄和程序的句柄,都从winmain处获得:
EngineInit((long)WindowHandle,hInstance);
6-地图,这里的地图不包括敌人位置,只是一个和平宁静的地图环境,
包括天空盒的纹理文件的指向,天空中是否有太阳,云、雨、雾、白天还是黑夜等情况,如果有必要,还可以装入
陆地或BSP地图,可以采用块写文件的方法,将地图文件指向信息写入一个文件,在使用时类读就可以了。
7-没事别把engine作为参数东传西传的,否则保证你的FPS减低一办。