创建的场景的步骤如下:
1、h文件中继承声明场景类;
2、cpp实现对应的虚函数;
#pragma once
#include "Tcl.h"
using namespace tcl;
//场景类 需要继承CSingleScene,场景类有自己的事件处理等
class CHelloScene : public CSingleScene
{
public:
CHelloScene();
//这两个方法会在每帧渲染的时候都被调用,调用顺序是先调用UpdateSingleScene,然后是2DScene。
//
void OnUpdateSingleScene();
//OnUpdate2DScene中绘制FPS帧率,这样不会被3D物体遮挡。
void OnUpdate2DScene();
//这两个方法用于加载blender资源
//直接解析一个blender文件,将blender所包含的物体、动画、图片等数据都加载到引擎
//需要走一次完整的blender解析流程
void LoadBlenderScene();
//需要先将blender解析成xml文件包,以后每次用下面的接口把解析结果加载到引擎
//这种方法不需要每次都解析blender文件,只是加载解析好的资源,所以加快了加载速度。
void LoadBlenderSceneXML();
};
#include "HelloScene.h"
CHelloScene::CHelloScene()
{
#ifdef ANDROID_NDK
//android版本推荐使用xml加载方式,只需要TCLMainInterface的getDataName方法中返回资源包的名字即可。
//不再需要单独调用。
#else
//win版开发调试可以使用两种模式的任何一种。直接加载blender文件的优势在于当blender文件变动频繁时,
//不需要每次都先把blender解析成xml。
//LoadBlenderScene();
LoadBlenderSceneXML();
#endif
}
//直接解析一个blender文件,将blender所包含的物体、动画、图片等数据都加载到引擎
//需要走一次完整的blender解析流程
void CHelloScene::LoadBlenderScene()
{
m_pSmgr->loadBlenderFile("./data/launcher.blend");
}
//需要先将blender解析成xml文件包,以后每次用下面的接口把解析结果加载到引擎
//这种方法不需要每次都解析blender文件,只是加载解析好的资源,所以加快了加载速度。
void CHelloScene::LoadBlenderSceneXML()
{
//打开资源包
m_pISingleSceneManger->GetTclDevice()->getFileSystem()->addZipFileArchive("./data/libHelloData.so");
//读取xml
io::IReadFile* xmlRead = m_pSmgr->getFileSystem()->createAndOpenFile("./data/secenDes.xml");
if (xmlRead)
{
//加载场景
m_pSmgr->loadScene(xmlRead);
}
xmlRead->drop();
}
//纯虚函数 必须实现
void CHelloScene::OnUpdateSingleScene()
{
}
//每帧都会被调用。调用在物体绘制以后,所以这里面处理FPS等可以避免被3D物体遮挡。
void CHelloScene::OnUpdate2DScene()
{
int fps = m_pSmgr->getVideoDriver()->getFPS(); //获取当前帧率
gui::IGUIFont* m_pGuiFont = m_pDevice->getGUIEnvironment()->getFont("./data/bigfont.png"); //加载字母数字字体图片
core::stringw fpsstr;
fpsstr +=L"fps:";
fpsstr += fps; //包装字符串
m_pGuiFont->draw(fpsstr, core::rect<s32>(0,0,300,60), video::SColor(255, 255, 0, 0)); //字符串绘制到屏幕区域
}