1、首先创建场景
//场景类 需要继承CSingleScene,场景类有自己的事件处理等
class CViewControlScene : public CSingleScene,public CTSingleton<CViewControlScene>
{
public:
CViewControlScene();
//这两个方法会在每帧渲染的时候都被调用,调用顺序是先调用UpdateSingleScene,然后是2DScene。
//可以在OnUpdate2DScene中绘制FPS帧率,这样不会被3D物体遮挡。
void OnUpdateSingleScene();
void OnUpdate2DScene();
//这两个方法用于加载blender资源
//直接解析一个blender文件,将blender所包含的物体、动画、图片等数据都加载到引擎
//需要走一次完整的blender解析流程
void LoadBlenderScene();
//需要先将blender解析成xml文件包,以后每次用下面的接口把解析结果加载到引擎
//这种方法不需要每次都解析blender文件,只是加载解析好的资源,所以加快了加载速度。
void LoadBlenderSceneXML();
//场景事件处理
bool OnEvent(const SEvent& in_event);
int GetSingleSceneType(){return 0;}
//logic层创建
void CreateLogicNode();
//view创建
void CreateView();
//Node for Logic
public:
//当前场景鼠标选中物体实例
ISceneNode* m_MouseCollisionNode;
private:
//单例实现
CT_DECLARE_SINGLETON(CViewControlScene)
};
2、创建主板块视图
#pragma once
#include "Component/CTSingleton.h"
#include "Component/CBaseView.h"
#include "Component/CViewNodeGroup.h"
#include "CUIViewNode.h"
using namespace tcl;
//Home view
class CHomeView : public CViewNodeGroup,public CTSingleton<CHomeView>
{
public:
CHomeView();
//当某一个View获取focus时,执行onGetFocus,丢失focus时执行onLoseFocus
virtual void onGetFocus();
virtual void onLoseFocus();
private:
//主页面的页面切换动画
CAnimationPlayer* m_pHomeAnmPlayer;
//子view列表
core::array<CUIViewNode*> m_ViewNodes;
ISceneNode* m_pTitleFocus;
ISceneNode* m_pTitle;
ISceneNode* m_HomeParent;
//单例实现
CT_DECLARE_SINGLETON(CHomeView)
};
3、视图的业务逻辑处理
#pragma once
#include "Component/CBaseLogic.h"
class CAnimationPlayer;
//这个类负责主页面的逻辑处理
class CHomeLogic : public CBaseLogic
{
public:
CHomeLogic(CLogicTree* parent,u32 handle);
~CHomeLogic();
//事件处理函数
virtual void processEvent(const SEvent & event);
};