UI引擎开发系列(三) 场景视图控制

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);
};



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值