490 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			490 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			C++
		
	
	
	
| #pragma once
 | |
| #include "ebase.h"
 | |
| #include "Win\winbase.h"
 | |
| 
 | |
| namespace e2d 
 | |
| {
 | |
| 
 | |
| class ENode :
 | |
| 	public EObject
 | |
| {
 | |
| 	friend EScene;
 | |
| 
 | |
| public:
 | |
| 	ENode();
 | |
| 
 | |
| 	ENode(
 | |
| 		const EString & name
 | |
| 	);
 | |
| 
 | |
| 	virtual ~ENode();
 | |
| 
 | |
| 	// 重写这个函数,它将在节点进入场景时自动执行
 | |
| 	virtual void onEnter();
 | |
| 
 | |
| 	// 重写这个函数,它将在节点离开场景时自动执行
 | |
| 	virtual void onExit();
 | |
| 
 | |
| 	// 获取节点显示状态
 | |
| 	virtual bool isVisiable() const;
 | |
| 
 | |
| 	// 获取节点名称
 | |
| 	virtual EString getName() const;
 | |
| 
 | |
| 	// 获取节点绘图顺序
 | |
| 	virtual int getOrder() const;
 | |
| 
 | |
| 	// 获取节点横坐标
 | |
| 	virtual float getPosX() const;
 | |
| 
 | |
| 	// 获取节点纵坐标
 | |
| 	virtual float getPosY() const;
 | |
| 
 | |
| 	// 获取节点坐标
 | |
| 	virtual EPoint getPos() const;
 | |
| 
 | |
| 	// 获取节点宽度
 | |
| 	virtual float getWidth() const;
 | |
| 
 | |
| 	// 获取节点高度
 | |
| 	virtual float getHeight() const;
 | |
| 
 | |
| 	// 获取节点宽度(不考虑缩放)
 | |
| 	virtual float getRealWidth() const;
 | |
| 
 | |
| 	// 获取节点高度(不考虑缩放)
 | |
| 	virtual float getRealHeight() const;
 | |
| 
 | |
| 	// 获取节点大小(不考虑缩放)
 | |
| 	virtual ESize getRealSize() const;
 | |
| 
 | |
| 	// 获取节点大小
 | |
| 	virtual ESize getSize() const;
 | |
| 
 | |
| 	// 获取节点横向缩放比例
 | |
| 	virtual float getScaleX() const;
 | |
| 
 | |
| 	// 获取节点纵向缩放比例
 | |
| 	virtual float getScaleY() const;
 | |
| 
 | |
| 	// 获取节点横向倾斜角度
 | |
| 	virtual float getSkewX() const;
 | |
| 
 | |
| 	// 获取节点纵向倾斜角度
 | |
| 	virtual float getSkewY() const;
 | |
| 
 | |
| 	// 获取节点旋转角度
 | |
| 	virtual float getRotation() const;
 | |
| 
 | |
| 	// 获取节点透明度
 | |
| 	virtual float getOpacity() const;
 | |
| 
 | |
| 	// 获取父节点
 | |
| 	virtual ENode * getParent() const;
 | |
| 
 | |
| 	// 获取节点所在场景
 | |
| 	virtual EScene * getParentScene() const;
 | |
| 
 | |
| 	// 获取所有子节点
 | |
| 	virtual EVector<ENode*> &getChildren();
 | |
| 
 | |
| 	// 获取子节点数量
 | |
| 	virtual size_t getChildrenCount() const;
 | |
| 
 | |
| 	// 根据名字获取子节点
 | |
| 	virtual ENode * getChild(
 | |
| 		const EString & name
 | |
| 	);
 | |
| 
 | |
| 	// 设置节点是否显示
 | |
| 	virtual void setVisiable(
 | |
| 		bool value
 | |
| 	);
 | |
| 
 | |
| 	// 设置节点名称
 | |
| 	virtual void setName(
 | |
| 		const EString & name
 | |
| 	);
 | |
| 
 | |
| 	// 设置节点横坐标
 | |
| 	virtual void setPosX(
 | |
| 		float x
 | |
| 	);
 | |
| 
 | |
| 	// 设置节点纵坐标
 | |
| 	virtual void setPosY(
 | |
| 		float y
 | |
| 	);
 | |
| 
 | |
| 	// 设置节点坐标
 | |
| 	virtual void setPos(
 | |
| 		const EPoint & point
 | |
| 	);
 | |
| 
 | |
| 	// 设置节点坐标
 | |
| 	virtual void setPos(
 | |
| 		float x,
 | |
| 		float y
 | |
| 	);
 | |
| 
 | |
| 	// 移动节点
 | |
| 	virtual void move(
 | |
| 		float x,
 | |
| 		float y
 | |
| 	);
 | |
| 
 | |
| 	// 移动节点
 | |
| 	virtual void move(
 | |
| 		const EVec & v
 | |
| 	);
 | |
| 
 | |
| 	// 设置节点宽度
 | |
| 	virtual void setWidth(
 | |
| 		float width
 | |
| 	);
 | |
| 
 | |
| 	// 设置节点高度
 | |
| 	virtual void setHeight(
 | |
| 		float height
 | |
| 	);
 | |
| 
 | |
| 	// 设置节点大小
 | |
| 	virtual void setSize(
 | |
| 		const ESize & size
 | |
| 	);
 | |
| 
 | |
| 	// 设置节点大小
 | |
| 	virtual void setSize(
 | |
| 		float width,
 | |
| 		float height
 | |
| 	);
 | |
| 
 | |
| 	// 设置节点绘图顺序
 | |
| 	// 默认为 0
 | |
| 	virtual void setOrder(
 | |
| 		int order
 | |
| 	);
 | |
| 
 | |
| 	// 设置横向缩放比例
 | |
| 	// 默认为 1.0f
 | |
| 	virtual void setScaleX(
 | |
| 		float scaleX
 | |
| 	);
 | |
| 
 | |
| 	// 设置纵向缩放比例
 | |
| 	// 默认为 1.0f
 | |
| 	virtual void setScaleY(
 | |
| 		float scaleY
 | |
| 	);
 | |
| 
 | |
| 	// 设置缩放比例
 | |
| 	// 默认为 (1.0f, 1.0f)
 | |
| 	virtual void setScale(
 | |
| 		float scaleX,
 | |
| 		float scaleY
 | |
| 	);
 | |
| 
 | |
| 	// 设置缩放比例
 | |
| 	// 默认为 1.0f
 | |
| 	virtual void setScale(
 | |
| 		float scale
 | |
| 	);
 | |
| 
 | |
| 	// 设置横向倾斜角度
 | |
| 	// 默认为 0
 | |
| 	virtual void setSkewX(
 | |
| 		float angleX
 | |
| 	);
 | |
| 
 | |
| 	// 设置纵向倾斜角度
 | |
| 	// 默认为 0
 | |
| 	virtual void setSkewY(
 | |
| 		float angleY
 | |
| 	);
 | |
| 
 | |
| 	// 设置倾斜角度
 | |
| 	// 默认为 (0, 0)
 | |
| 	virtual void setSkew(
 | |
| 		float angleX,
 | |
| 		float angleY
 | |
| 	);
 | |
| 
 | |
| 	// 设置旋转角度
 | |
| 	// 默认为 0
 | |
| 	virtual void setRotation(
 | |
| 		float rotation
 | |
| 	);
 | |
| 
 | |
| 	// 设置透明度
 | |
| 	// 默认为 1.0f, 范围 [0, 1]
 | |
| 	virtual void setOpacity(
 | |
| 		float opacity
 | |
| 	);
 | |
| 
 | |
| 	// 设置纵向锚点
 | |
| 	// 默认为 0, 范围 [0, 1]
 | |
| 	virtual void setAnchorX(
 | |
| 		float anchorX
 | |
| 	);
 | |
| 
 | |
| 	// 设置横向锚点
 | |
| 	// 默认为 0, 范围 [0, 1]
 | |
| 	virtual void setAnchorY(
 | |
| 		float anchorY
 | |
| 	);
 | |
| 
 | |
| 	// 设置锚点
 | |
| 	// 默认为 (0, 0), 范围 [0, 1]
 | |
| 	virtual void setAnchor(
 | |
| 		float anchorX,
 | |
| 		float anchorY
 | |
| 	);
 | |
| 
 | |
| 	// 设置父节点
 | |
| 	virtual void setParent(
 | |
| 		ENode* parent
 | |
| 	);
 | |
| 
 | |
| 	// 添加子节点
 | |
| 	virtual void addChild(
 | |
| 		ENode * child,
 | |
| 		int order = 0
 | |
| 	);
 | |
| 
 | |
| 	// 从父节点移除
 | |
| 	virtual void removeFromParent(
 | |
| 		bool release = false
 | |
| 	);
 | |
| 
 | |
| 	// 移除子节点
 | |
| 	virtual bool removeChild(
 | |
| 		ENode * child, 
 | |
| 		bool release = false
 | |
| 	);
 | |
| 
 | |
| 	// 移除子节点
 | |
| 	virtual void removeChild(
 | |
| 		const EString & childName,
 | |
| 		bool release = false
 | |
| 	);
 | |
| 
 | |
| 	// 移除所有节点
 | |
| 	virtual void clearAllChildren(
 | |
| 		bool release = false
 | |
| 	);
 | |
| 
 | |
| protected:
 | |
| 	// 访问节点
 | |
| 	virtual void _callOn();
 | |
| 
 | |
| 	// 渲染节点
 | |
| 	virtual void _onRender();
 | |
| 
 | |
| 	// 节点被添加到场景时的执行程序
 | |
| 	virtual void _onEnter();
 | |
| 
 | |
| 	// 节点从场景中消失时的执行程序
 | |
| 	virtual void _onExit();
 | |
| 
 | |
| 	// 节点清除时的执行程序
 | |
| 	virtual void _onClear();
 | |
| 
 | |
| 	// 子节点排序
 | |
| 	void _sortChildren();
 | |
| 
 | |
| 	// 设置节点所在场景
 | |
| 	virtual void _setParentScene(
 | |
| 		EScene * scene
 | |
| 	);
 | |
| 
 | |
| 	// 只考虑自身进行二维矩阵变换
 | |
| 	void _updateTransformToReal();
 | |
| 
 | |
| 	// 更新所有子节点矩阵
 | |
| 	void _updateChildrenTransform();
 | |
| 
 | |
| 	// 更新所有子节点透明度
 | |
| 	void _updateChildrenOpacity();
 | |
| 
 | |
| 	// 更新节点矩阵
 | |
| 	static void _updateTransform(ENode * node);
 | |
| 
 | |
| 	// 更新节点透明度
 | |
| 	static void _updateOpacity(ENode * node);
 | |
| 
 | |
| protected:
 | |
| 	EString		m_sName;
 | |
| 	size_t		m_nHashName;
 | |
| 	EPoint		m_Pos;
 | |
| 	ESize		m_Size;
 | |
| 	float		m_fScaleX;
 | |
| 	float		m_fScaleY;
 | |
| 	float		m_fRotation;
 | |
| 	float		m_fSkewAngleX;
 | |
| 	float		m_fSkewAngleY;
 | |
| 	float		m_fDisplayOpacity;
 | |
| 	float		m_fRealOpacity;
 | |
| 	float		m_fAnchorX;
 | |
| 	float		m_fAnchorY;
 | |
| 	int			m_nOrder;
 | |
| 	bool		m_bVisiable;
 | |
| 	bool		m_bDisplayedInScene;
 | |
| 	bool		m_bSortChildrenNeeded;
 | |
| 	bool		m_bTransformChildrenNeeded;
 | |
| 	EScene *	m_pParentScene;
 | |
| 	ENode *		m_pParent;
 | |
| 	D2D1::Matrix3x2F	m_Matri;
 | |
| 	EVector<ENode*>	m_vChildren;
 | |
| };
 | |
| 
 | |
| 
 | |
| class ERectangle :
 | |
| 	public ENode
 | |
| {
 | |
| public:
 | |
| 	ERectangle();
 | |
| 
 | |
| 	EColor getColor() const;
 | |
| 
 | |
| 	void setColor(EColor color);
 | |
| 
 | |
| protected:
 | |
| 	virtual void _onRender() override;
 | |
| 
 | |
| protected:
 | |
| 	EColor m_Color;
 | |
| };
 | |
| 
 | |
| 
 | |
| class ESprite :
 | |
| 	public ENode
 | |
| {
 | |
| public:
 | |
| 	// 创建一个空精灵
 | |
| 	ESprite();
 | |
| 
 | |
| 	// 从文件图片创建精灵
 | |
| 	ESprite(
 | |
| 		const EString & imageFileName
 | |
| 	);
 | |
| 
 | |
| 	// 从文件图片创建精灵并裁剪
 | |
| 	ESprite(
 | |
| 		const EString & imageFileName,
 | |
| 		float x,
 | |
| 		float y,
 | |
| 		float width,
 | |
| 		float height
 | |
| 	);
 | |
| 
 | |
| 	// 从资源图片创建精灵
 | |
| 	ESprite(
 | |
| 		const EString & resourceName,
 | |
| 		const EString & resourceType
 | |
| 	);
 | |
| 
 | |
| 	// 从资源图片创建精灵并裁剪
 | |
| 	ESprite(
 | |
| 		const EString & resourceName,
 | |
| 		const EString & resourceType,
 | |
| 		float x,
 | |
| 		float y,
 | |
| 		float width,
 | |
| 		float height
 | |
| 	);
 | |
| 
 | |
| 	// 获取精灵宽度
 | |
| 	virtual float getWidth() const override;
 | |
| 
 | |
| 	// 获取精灵高度
 | |
| 	virtual float getHeight() const override;
 | |
| 
 | |
| 	// 获取精灵大小
 | |
| 	virtual ESize getSize() const override;
 | |
| 
 | |
| 	// 获取精灵宽度(不考虑缩放)
 | |
| 	virtual float getRealWidth() const override;
 | |
| 
 | |
| 	// 获取精灵高度(不考虑缩放)
 | |
| 	virtual float getRealHeight() const override;
 | |
| 
 | |
| 	// 获取精灵大小(不考虑缩放)
 | |
| 	virtual ESize getRealSize() const override;
 | |
| 
 | |
| 	// 设置精灵宽度是失效的
 | |
| 	virtual void setWidth(float) override;
 | |
| 
 | |
| 	// 设置精灵高度是失效的
 | |
| 	virtual void setHeight(float) override;
 | |
| 
 | |
| 	// 设置精灵大小是失效的
 | |
| 	virtual void setSize(float, float) override;
 | |
| 	
 | |
| 	// 从文件加载图片
 | |
| 	void setImage(
 | |
| 		const EString & fileName
 | |
| 	);
 | |
| 
 | |
| 	// 从文件加载图片并裁剪
 | |
| 	void setImage(
 | |
| 		const EString & fileName,
 | |
| 		float x,
 | |
| 		float y,
 | |
| 		float width,
 | |
| 		float height
 | |
| 	);
 | |
| 
 | |
| 	// 从资源加载图片
 | |
| 	void setImage(
 | |
| 		const EString & resourceName,
 | |
| 		const EString & resourceType
 | |
| 	);
 | |
| 
 | |
| 	// 从资源加载图片并裁剪
 | |
| 	void setImage(
 | |
| 		const EString & resourceName,
 | |
| 		const EString & resourceType,
 | |
| 		float x,
 | |
| 		float y,
 | |
| 		float width,
 | |
| 		float height
 | |
| 	);
 | |
| 
 | |
| 	// 裁剪原图片
 | |
| 	void clipImage(
 | |
| 		float x,
 | |
| 		float y,
 | |
| 		float width,
 | |
| 		float height
 | |
| 	);
 | |
| 
 | |
| 	// 预加载资源
 | |
| 	static bool preloadImage(
 | |
| 		const EString & fileName
 | |
| 	);
 | |
| 
 | |
| 	// 预加载资源
 | |
| 	static bool preloadImage(
 | |
| 		const EString & resourceName,
 | |
| 		const EString & resourceType
 | |
| 	);
 | |
| 
 | |
| 	// 清空图片缓存
 | |
| 	static void clearCache();
 | |
| 
 | |
| protected:
 | |
| 	// 渲染精灵
 | |
| 	virtual void _onRender() override;
 | |
| 
 | |
| protected:
 | |
| 	float	m_fSourcePosX;
 | |
| 	float	m_fSourcePosY;
 | |
| 	float	m_fSourceWidth;
 | |
| 	float	m_fSourceHeight;
 | |
| 	EString m_sFileName;
 | |
| 	EString m_sResourceName;
 | |
| 	EString m_sResourceType;
 | |
| 	ID2D1Bitmap * m_pBitmap;
 | |
| };
 | |
| 
 | |
| } |