update Shape
This commit is contained in:
		
							parent
							
								
									dee2010e7c
								
							
						
					
					
						commit
						486ca4f848
					
				|  | @ -1,12 +1,12 @@ | ||||||
| #include "..\eactions.h" | #include "..\eactions.h" | ||||||
| 
 | 
 | ||||||
| e2d::ActionSequence::ActionSequence() : | e2d::ActionSequence::ActionSequence() | ||||||
| 	m_nActionIndex(0) | 	: m_nActionIndex(0) | ||||||
| { | { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| e2d::ActionSequence::ActionSequence(const std::initializer_list<Action*>& vActions) : | e2d::ActionSequence::ActionSequence(const std::initializer_list<Action*>& vActions) | ||||||
| 	m_nActionIndex(0) | 	: m_nActionIndex(0) | ||||||
| { | { | ||||||
| 	this->add(vActions); | 	this->add(vActions); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -13,6 +13,15 @@ e2d::Animation::Animation(double interval) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| e2d::Animation::Animation(const std::initializer_list<Image*>& vImages) | e2d::Animation::Animation(const std::initializer_list<Image*>& vImages) | ||||||
|  | 	: m_nFrameIndex(0) | ||||||
|  | 	, m_fInterval(1) | ||||||
|  | { | ||||||
|  | 	this->add(vImages); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | e2d::Animation::Animation(double interval, const std::initializer_list<Image*>& vImages) | ||||||
|  | 	: m_nFrameIndex(0) | ||||||
|  | 	, m_fInterval(interval) | ||||||
| { | { | ||||||
| 	this->add(vImages); | 	this->add(vImages); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -53,6 +53,14 @@ void e2d::Scene::add(Node * child, int order /* = 0 */) | ||||||
| 	m_pRoot->addChild(child, order); | 	m_pRoot->addChild(child, order); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void e2d::Scene::add(const std::initializer_list<Node*>& vNodes, int order) | ||||||
|  | { | ||||||
|  | 	for (const auto &node : vNodes) | ||||||
|  | 	{ | ||||||
|  | 		this->add(node, order); | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
| bool e2d::Scene::remove(Node * child) | bool e2d::Scene::remove(Node * child) | ||||||
| { | { | ||||||
| 	return m_pRoot->removeChild(child); | 	return m_pRoot->removeChild(child); | ||||||
|  |  | ||||||
|  | @ -4,7 +4,7 @@ | ||||||
| #include "..\etools.h" | #include "..\etools.h" | ||||||
| 
 | 
 | ||||||
| // 形状集合
 | // 形状集合
 | ||||||
| static std::vector<e2d::Shape*> s_vShapes; | static std::vector<e2d::ShapeBase*> s_vShapes; | ||||||
| // 监听器容器
 | // 监听器容器
 | ||||||
| static std::vector<e2d::CollisionListener*> s_vListeners; | static std::vector<e2d::CollisionListener*> s_vListeners; | ||||||
| // 碰撞触发状态
 | // 碰撞触发状态
 | ||||||
|  | @ -40,7 +40,7 @@ void e2d::CollisionManager::__update() | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void e2d::CollisionManager::__updateShape(e2d::Shape * pActiveShape) | void e2d::CollisionManager::__updateShape(e2d::ShapeBase * pActiveShape) | ||||||
| { | { | ||||||
| 	// 判断碰撞触发是否打开
 | 	// 判断碰撞触发是否打开
 | ||||||
| 	if (!s_bCollisionEnable) | 	if (!s_bCollisionEnable) | ||||||
|  | @ -206,17 +206,25 @@ std::vector<e2d::CollisionListener*> e2d::CollisionManager::getAll() | ||||||
| 	return s_vListeners; | 	return s_vListeners; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| e2d::Node * e2d::CollisionManager::getNode1() | e2d::Node* e2d::CollisionManager::isCausedBy(Node * pNode) | ||||||
| { |  | ||||||
| 	return s_pActiveNode; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| e2d::Node * e2d::CollisionManager::getNode2() |  | ||||||
| { | { | ||||||
|  | 	if (s_pActiveNode == pNode) | ||||||
| 		return s_pPassiveNode; | 		return s_pPassiveNode; | ||||||
|  | 	if (s_pPassiveNode == pNode) | ||||||
|  | 		return s_pActiveNode; | ||||||
|  | 	return nullptr; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void e2d::CollisionManager::__addShape(Shape * pShape) | e2d::Node* e2d::CollisionManager::isCausedBy(String name) | ||||||
|  | { | ||||||
|  | 	if (s_pActiveNode->getName() == name) | ||||||
|  | 		return s_pActiveNode; | ||||||
|  | 	if (s_pPassiveNode->getName() == name) | ||||||
|  | 		return s_pPassiveNode; | ||||||
|  | 	return nullptr; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void e2d::CollisionManager::__addShape(ShapeBase * pShape) | ||||||
| { | { | ||||||
| 	if (pShape) | 	if (pShape) | ||||||
| 	{ | 	{ | ||||||
|  | @ -230,7 +238,7 @@ void e2d::CollisionManager::__addShape(Shape * pShape) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void e2d::CollisionManager::__removeShape(Shape * pShape) | void e2d::CollisionManager::__removeShape(ShapeBase * pShape) | ||||||
| { | { | ||||||
| 	if (pShape) | 	if (pShape) | ||||||
| 	{ | 	{ | ||||||
|  |  | ||||||
|  | @ -378,7 +378,7 @@ double e2d::Node::getOpacity() const | ||||||
| 	return m_fRealOpacity; | 	return m_fRealOpacity; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| e2d::Shape * e2d::Node::getShape() const | e2d::ShapeBase * e2d::Node::getShape() const | ||||||
| { | { | ||||||
| 	return m_pShape; | 	return m_pShape; | ||||||
| } | } | ||||||
|  | @ -547,25 +547,25 @@ void e2d::Node::setSize(Size size) | ||||||
| 	this->setSize(size.width, size.height); | 	this->setSize(size.width, size.height); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void e2d::Node::setShape(Shape::TYPE type) | void e2d::Node::setShape(Shape type) | ||||||
| { | { | ||||||
| 	switch (type) | 	switch (type) | ||||||
| 	{ | 	{ | ||||||
| 	case Shape::TYPE::RECTANGLE: | 	case Shape::RECTANGLE: | ||||||
| 	{ | 	{ | ||||||
| 		auto rect = new ShapeRectangle(this); | 		auto rect = new ShapeRectangle(this); | ||||||
| 		this->setShape(rect); | 		this->setShape(rect); | ||||||
| 		break; | 		break; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	case Shape::TYPE::CIRCLE: | 	case Shape::CIRCLE: | ||||||
| 	{ | 	{ | ||||||
| 		auto rect = new ShapeCircle(this); | 		auto rect = new ShapeCircle(this); | ||||||
| 		this->setShape(rect); | 		this->setShape(rect); | ||||||
| 		break; | 		break; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	case Shape::TYPE::ELLIPSE: | 	case Shape::ELLIPSE: | ||||||
| 	{ | 	{ | ||||||
| 		auto rect = new ShapeEllipse(this); | 		auto rect = new ShapeEllipse(this); | ||||||
| 		this->setShape(rect); | 		this->setShape(rect); | ||||||
|  | @ -577,7 +577,7 @@ void e2d::Node::setShape(Shape::TYPE type) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void e2d::Node::setShape(Shape * pShape) | void e2d::Node::setShape(ShapeBase * pShape) | ||||||
| { | { | ||||||
| 	// 删除旧的形状
 | 	// 删除旧的形状
 | ||||||
| 	CollisionManager::__removeShape(m_pShape); | 	CollisionManager::__removeShape(m_pShape); | ||||||
|  |  | ||||||
|  | @ -2,7 +2,7 @@ | ||||||
| #include "..\emanagers.h" | #include "..\emanagers.h" | ||||||
| #include "..\enodes.h" | #include "..\enodes.h" | ||||||
| 
 | 
 | ||||||
| e2d::Shape::Shape() | e2d::ShapeBase::ShapeBase() | ||||||
| 	: m_bIsVisiable(true) | 	: m_bIsVisiable(true) | ||||||
| 	, m_nColor(Color::RED) | 	, m_nColor(Color::RED) | ||||||
| 	, m_fOpacity(1) | 	, m_fOpacity(1) | ||||||
|  | @ -13,42 +13,42 @@ e2d::Shape::Shape() | ||||||
| { | { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| e2d::Shape::~Shape() | e2d::ShapeBase::~ShapeBase() | ||||||
| { | { | ||||||
| 	SafeReleaseInterface(&m_pTransformedShape); | 	SafeReleaseInterface(&m_pTransformedShape); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| e2d::Node * e2d::Shape::getParentNode() const | e2d::Node * e2d::ShapeBase::getParentNode() const | ||||||
| { | { | ||||||
| 	return m_pParentNode; | 	return m_pParentNode; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void e2d::Shape::setEnable(bool bEnable) | void e2d::ShapeBase::setEnable(bool bEnable) | ||||||
| { | { | ||||||
| 	m_bEnable = bEnable; | 	m_bEnable = bEnable; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void e2d::Shape::setVisiable(bool bVisiable) | void e2d::ShapeBase::setVisiable(bool bVisiable) | ||||||
| { | { | ||||||
| 	m_bIsVisiable = bVisiable; | 	m_bIsVisiable = bVisiable; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void e2d::Shape::setColor(UINT32 color) | void e2d::ShapeBase::setColor(UINT32 color) | ||||||
| { | { | ||||||
| 	m_nColor = color; | 	m_nColor = color; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void e2d::Shape::setOpacity(double opacity) | void e2d::ShapeBase::setOpacity(double opacity) | ||||||
| { | { | ||||||
| 	m_fOpacity = min(max(static_cast<float>(opacity), 0), 1); | 	m_fOpacity = min(max(static_cast<float>(opacity), 0), 1); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void e2d::Shape::setAutoResize(bool bEnable) | void e2d::ShapeBase::setAutoResize(bool bEnable) | ||||||
| { | { | ||||||
| 	m_bAutoResize = bEnable; | 	m_bAutoResize = bEnable; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void e2d::Shape::_render() | void e2d::ShapeBase::_render() | ||||||
| { | { | ||||||
| 	if (m_pTransformedShape && m_bEnable) | 	if (m_pTransformedShape && m_bEnable) | ||||||
| 	{ | 	{ | ||||||
|  | @ -65,7 +65,7 @@ void e2d::Shape::_render() | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| e2d::Relation e2d::Shape::getRelationWith(Shape * pShape) const | e2d::Relation e2d::ShapeBase::getRelationWith(ShapeBase * pShape) const | ||||||
| { | { | ||||||
| 	if (m_pTransformedShape && pShape->m_pTransformedShape) | 	if (m_pTransformedShape && pShape->m_pTransformedShape) | ||||||
| 	{ | 	{ | ||||||
|  | @ -85,7 +85,7 @@ e2d::Relation e2d::Shape::getRelationWith(Shape * pShape) const | ||||||
| 	return Relation::UNKNOWN; | 	return Relation::UNKNOWN; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void e2d::Shape::_transform() | void e2d::ShapeBase::_transform() | ||||||
| { | { | ||||||
| 	if (m_pParentNode && m_bEnable) | 	if (m_pParentNode && m_bEnable) | ||||||
| 	{ | 	{ | ||||||
|  |  | ||||||
|  | @ -517,7 +517,13 @@ public: | ||||||
| 
 | 
 | ||||||
| 	// ´´½¨Ö¡¶¯»
 | 	// ´´½¨Ö¡¶¯»
 | ||||||
| 	Animation( | 	Animation( | ||||||
| 		const std::initializer_list<Image*>& vImages | 		const std::initializer_list<Image*>& vImages	/* 关键帧数组 */ | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 创建特定帧间隔的帧动画
 | ||||||
|  | 	Animation( | ||||||
|  | 		double interval,	/* 帧间隔(秒) */ | ||||||
|  | 		const std::initializer_list<Image*>& vImages	/* 关键帧数组 */ | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
| 	virtual ~Animation(); | 	virtual ~Animation(); | ||||||
|  | @ -763,12 +769,7 @@ namespace e2d | ||||||
| 
 | 
 | ||||||
| 	inline e2d::ActionSequence * e2d::action::Sequence(const std::initializer_list<Action*>& vActions) | 	inline e2d::ActionSequence * e2d::action::Sequence(const std::initializer_list<Action*>& vActions) | ||||||
| 	{ | 	{ | ||||||
| 		auto action = new (std::nothrow) ActionSequence(); | 		return new (std::nothrow) ActionSequence(vActions); | ||||||
| 		if (action) |  | ||||||
| 		{ |  | ||||||
| 			action->add(vActions); |  | ||||||
| 		} |  | ||||||
| 		return action; |  | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	inline e2d::ActionDelay * e2d::action::Delay(double duration) | 	inline e2d::ActionDelay * e2d::action::Delay(double duration) | ||||||
|  | @ -783,12 +784,7 @@ namespace e2d | ||||||
| 
 | 
 | ||||||
| 	inline e2d::Animation * e2d::action::Animate(double interval, const std::initializer_list<Image*>& vFrames) | 	inline e2d::Animation * e2d::action::Animate(double interval, const std::initializer_list<Image*>& vFrames) | ||||||
| 	{ | 	{ | ||||||
| 		auto animation = new (std::nothrow) Animation(interval); | 		return new (std::nothrow) Animation(interval, vFrames); | ||||||
| 		if (animation) |  | ||||||
| 		{ |  | ||||||
| 			animation->add(vFrames); |  | ||||||
| 		} |  | ||||||
| 		return animation; |  | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	inline e2d::ActionFunc * e2d::action::Func(Function func) | 	inline e2d::ActionFunc * e2d::action::Func(Function func) | ||||||
|  |  | ||||||
|  | @ -372,6 +372,15 @@ enum class Relation : int | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | // 形状类别
 | ||||||
|  | enum class Shape : int | ||||||
|  | { | ||||||
|  | 	RECTANGLE,	/* 矩形 */ | ||||||
|  | 	CIRCLE,		/* 圆形 */ | ||||||
|  | 	ELLIPSE		/* 椭圆形 */ | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| // 文本样式
 | // 文本样式
 | ||||||
| struct Font | struct Font | ||||||
| { | { | ||||||
|  | @ -545,8 +554,14 @@ public: | ||||||
| 
 | 
 | ||||||
| 	// 添加节点到场景
 | 	// 添加节点到场景
 | ||||||
| 	void add( | 	void add( | ||||||
| 		Node * child, | 		Node * child,	/* 要添加的节点 */ | ||||||
| 		int zOrder = 0 | 		int zOrder = 0	/* 渲染顺序 */ | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 添加节点到场景
 | ||||||
|  | 	virtual void add( | ||||||
|  | 		const std::initializer_list<Node*>& vNodes,	/* 节点数组 */ | ||||||
|  | 		int order = 0								/* 渲染顺序 */ | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
| 	// 删除子节点
 | 	// 删除子节点
 | ||||||
|  | @ -578,86 +593,6 @@ protected: | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class CollisionManager; |  | ||||||
| 
 |  | ||||||
| // 形状
 |  | ||||||
| class Shape : |  | ||||||
| 	public Object |  | ||||||
| { |  | ||||||
| 	friend CollisionManager; |  | ||||||
| 	friend Node; |  | ||||||
| 
 |  | ||||||
| public: |  | ||||||
| 	// 形状类别
 |  | ||||||
| 	enum class TYPE : int |  | ||||||
| 	{ |  | ||||||
| 		RECTANGLE,	/* 矩形 */ |  | ||||||
| 		CIRCLE,		/* 圆形 */ |  | ||||||
| 		ELLIPSE		/* 椭圆形 */ |  | ||||||
| 	}; |  | ||||||
| 
 |  | ||||||
| public: |  | ||||||
| 	Shape(); |  | ||||||
| 
 |  | ||||||
| 	virtual ~Shape(); |  | ||||||
| 
 |  | ||||||
| 	// 判断两形状的交集关系
 |  | ||||||
| 	virtual Relation getRelationWith( |  | ||||||
| 		Shape * pShape |  | ||||||
| 	) const; |  | ||||||
| 
 |  | ||||||
| 	// 获取父节点
 |  | ||||||
| 	Node * getParentNode() const; |  | ||||||
| 
 |  | ||||||
| 	// 启用或关闭该形状
 |  | ||||||
| 	virtual void setEnable( |  | ||||||
| 		bool bEnable |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 设置形状的可见性
 |  | ||||||
| 	void setVisiable( |  | ||||||
| 		bool bVisiable |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 设置绘制颜色
 |  | ||||||
| 	void setColor( |  | ||||||
| 		UINT32 color |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 设置绘制透明度
 |  | ||||||
| 	void setOpacity( |  | ||||||
| 		double opacity |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 设置大小跟随
 |  | ||||||
| 	void setAutoResize( |  | ||||||
| 		bool bEnable |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 获取 ID2D1Geometry 对象
 |  | ||||||
| 	virtual ID2D1Geometry * getD2dGeometry() const = 0; |  | ||||||
| 
 |  | ||||||
| protected: |  | ||||||
| 	// 转换形状
 |  | ||||||
| 	virtual void _transform(); |  | ||||||
| 
 |  | ||||||
| 	// 重设大小
 |  | ||||||
| 	virtual void _resize() = 0; |  | ||||||
| 
 |  | ||||||
| 	// 渲染形状
 |  | ||||||
| 	virtual void _render(); |  | ||||||
| 
 |  | ||||||
| protected: |  | ||||||
| 	bool	m_bEnable; |  | ||||||
| 	bool	m_bIsVisiable; |  | ||||||
| 	bool	m_bAutoResize; |  | ||||||
| 	UINT32	m_nColor; |  | ||||||
| 	float	m_fOpacity; |  | ||||||
| 	Node *	m_pParentNode; |  | ||||||
| 	ID2D1TransformedGeometry * m_pTransformedShape; |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| // String 类模板函数定义
 | // String 类模板函数定义
 | ||||||
| template<typename T> | template<typename T> | ||||||
| inline e2d::String e2d::String::toString(T value) | inline e2d::String e2d::String::toString(T value) | ||||||
|  |  | ||||||
|  | @ -12,6 +12,7 @@ class Node; | ||||||
| class Timer; | class Timer; | ||||||
| class Action; | class Action; | ||||||
| class Music; | class Music; | ||||||
|  | class ShapeBase; | ||||||
| class Transition; | class Transition; | ||||||
| class InputListener; | class InputListener; | ||||||
| class CollisionListener; | class CollisionListener; | ||||||
|  | @ -354,7 +355,7 @@ private: | ||||||
| class CollisionManager | class CollisionManager | ||||||
| { | { | ||||||
| 	friend Node; | 	friend Node; | ||||||
| 	friend Shape; | 	friend ShapeBase; | ||||||
| 	friend CollisionListener; | 	friend CollisionListener; | ||||||
| 
 | 
 | ||||||
| public: | public: | ||||||
|  | @ -401,11 +402,15 @@ public: | ||||||
| 	// 获取全部监听器
 | 	// 获取全部监听器
 | ||||||
| 	static std::vector<CollisionListener*> getAll(); | 	static std::vector<CollisionListener*> getAll(); | ||||||
| 
 | 
 | ||||||
| 	// 获取发生碰撞的节点 1
 | 	// 判断碰撞是否由该节点引发(如果是,返回与其相撞的节点指针,否则返回空)
 | ||||||
| 	static Node* getNode1(); | 	static Node* isCausedBy( | ||||||
|  | 		Node * pNode | ||||||
|  | 	); | ||||||
| 
 | 
 | ||||||
| 	// 获取发生碰撞的节点 2
 | 	// 判断发生碰撞的节点名称是否相同(若相同返回其指针,否则返回空)
 | ||||||
| 	static Node* getNode2(); | 	static Node* isCausedBy( | ||||||
|  | 		String name | ||||||
|  | 	); | ||||||
| 
 | 
 | ||||||
| private: | private: | ||||||
| 	// 添加碰撞监听
 | 	// 添加碰撞监听
 | ||||||
|  | @ -418,17 +423,17 @@ private: | ||||||
| 
 | 
 | ||||||
| 	// 更新形状
 | 	// 更新形状
 | ||||||
| 	static void __updateShape( | 	static void __updateShape( | ||||||
| 		Shape * pActiveShape | 		ShapeBase * pActiveShape | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
| 	// 添加形状
 | 	// 添加形状
 | ||||||
| 	static void __addShape( | 	static void __addShape( | ||||||
| 		Shape * pShape | 		ShapeBase * pShape | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
| 	// 删除已绑定的形状
 | 	// 删除已绑定的形状
 | ||||||
| 	static void __removeShape( | 	static void __removeShape( | ||||||
| 		Shape * pShape | 		ShapeBase * pShape | ||||||
| 	); | 	); | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -7,13 +7,14 @@ namespace e2d | ||||||
| 
 | 
 | ||||||
| class Action; | class Action; | ||||||
| class Transition; | class Transition; | ||||||
|  | class ShapeBase; | ||||||
| class CollisionManager; | class CollisionManager; | ||||||
| 
 | 
 | ||||||
| class Node : | class Node : | ||||||
| 	public Object | 	public Object | ||||||
| { | { | ||||||
| 	friend Scene; | 	friend Scene; | ||||||
| 	friend Shape; | 	friend ShapeBase; | ||||||
| 	friend Transition; | 	friend Transition; | ||||||
| 	friend CollisionManager; | 	friend CollisionManager; | ||||||
| 
 | 
 | ||||||
|  | @ -116,7 +117,7 @@ public: | ||||||
| 	virtual double getOpacity() const; | 	virtual double getOpacity() const; | ||||||
| 
 | 
 | ||||||
| 	// 获取节点形状
 | 	// 获取节点形状
 | ||||||
| 	virtual Shape * getShape() const; | 	virtual ShapeBase * getShape() const; | ||||||
| 
 | 
 | ||||||
| 	// 获取父节点
 | 	// 获取父节点
 | ||||||
| 	virtual Node * getParent() const; | 	virtual Node * getParent() const; | ||||||
|  | @ -312,12 +313,12 @@ public: | ||||||
| 
 | 
 | ||||||
| 	// 设置节点形状
 | 	// 设置节点形状
 | ||||||
| 	virtual void setShape( | 	virtual void setShape( | ||||||
| 		Shape::TYPE type | 		Shape type | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
| 	// 设置节点形状
 | 	// 设置节点形状
 | ||||||
| 	virtual void setShape( | 	virtual void setShape( | ||||||
| 		Shape * pShape | 		ShapeBase * pShape | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
| 	// 添加可碰撞节点的名称
 | 	// 添加可碰撞节点的名称
 | ||||||
|  | @ -455,7 +456,7 @@ protected: | ||||||
| 	bool		m_bDisplayedInScene; | 	bool		m_bDisplayedInScene; | ||||||
| 	bool		m_bSortChildrenNeeded; | 	bool		m_bSortChildrenNeeded; | ||||||
| 	bool		m_bTransformNeeded; | 	bool		m_bTransformNeeded; | ||||||
| 	Shape *		m_pShape; | 	ShapeBase *	m_pShape; | ||||||
| 	Scene *		m_pParentScene; | 	Scene *		m_pParentScene; | ||||||
| 	Node *		m_pParent; | 	Node *		m_pParent; | ||||||
| 	D2D1::Matrix3x2F		m_MatriInitial; | 	D2D1::Matrix3x2F		m_MatriInitial; | ||||||
|  |  | ||||||
|  | @ -6,9 +6,80 @@ namespace e2d | ||||||
| { | { | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | class CollisionManager; | ||||||
|  | 
 | ||||||
|  | // 形状
 | ||||||
|  | class ShapeBase : | ||||||
|  | 	public Object | ||||||
|  | { | ||||||
|  | 	friend CollisionManager; | ||||||
|  | 	friend Node; | ||||||
|  | 
 | ||||||
|  | public: | ||||||
|  | 	ShapeBase(); | ||||||
|  | 
 | ||||||
|  | 	virtual ~ShapeBase(); | ||||||
|  | 
 | ||||||
|  | 	// 判断两形状的交集关系
 | ||||||
|  | 	virtual Relation getRelationWith( | ||||||
|  | 		ShapeBase * pShape | ||||||
|  | 	) const; | ||||||
|  | 
 | ||||||
|  | 	// 获取父节点
 | ||||||
|  | 	Node * getParentNode() const; | ||||||
|  | 
 | ||||||
|  | 	// 启用或关闭该形状
 | ||||||
|  | 	virtual void setEnable( | ||||||
|  | 		bool bEnable | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 设置形状的可见性
 | ||||||
|  | 	void setVisiable( | ||||||
|  | 		bool bVisiable | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 设置绘制颜色
 | ||||||
|  | 	void setColor( | ||||||
|  | 		UINT32 color | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 设置绘制透明度
 | ||||||
|  | 	void setOpacity( | ||||||
|  | 		double opacity | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 设置大小跟随
 | ||||||
|  | 	void setAutoResize( | ||||||
|  | 		bool bEnable | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 获取 ID2D1Geometry 对象
 | ||||||
|  | 	virtual ID2D1Geometry * getD2dGeometry() const = 0; | ||||||
|  | 
 | ||||||
|  | protected: | ||||||
|  | 	// 转换形状
 | ||||||
|  | 	virtual void _transform(); | ||||||
|  | 
 | ||||||
|  | 	// 重设大小
 | ||||||
|  | 	virtual void _resize() = 0; | ||||||
|  | 
 | ||||||
|  | 	// 渲染形状
 | ||||||
|  | 	virtual void _render(); | ||||||
|  | 
 | ||||||
|  | protected: | ||||||
|  | 	bool	m_bEnable; | ||||||
|  | 	bool	m_bIsVisiable; | ||||||
|  | 	bool	m_bAutoResize; | ||||||
|  | 	UINT32	m_nColor; | ||||||
|  | 	float	m_fOpacity; | ||||||
|  | 	Node *	m_pParentNode; | ||||||
|  | 	ID2D1TransformedGeometry * m_pTransformedShape; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| // 矩形
 | // 矩形
 | ||||||
| class ShapeRectangle : | class ShapeRectangle : | ||||||
| 	public Shape | 	public ShapeBase | ||||||
| { | { | ||||||
| public: | public: | ||||||
| 	// 创建一个默认矩形
 | 	// 创建一个默认矩形
 | ||||||
|  | @ -51,7 +122,7 @@ protected: | ||||||
| 
 | 
 | ||||||
| // 圆形
 | // 圆形
 | ||||||
| class ShapeCircle : | class ShapeCircle : | ||||||
| 	public Shape | 	public ShapeBase | ||||||
| { | { | ||||||
| public: | public: | ||||||
| 	// 创建一个默认圆形
 | 	// 创建一个默认圆形
 | ||||||
|  | @ -90,7 +161,7 @@ protected: | ||||||
| 
 | 
 | ||||||
| // 椭圆形
 | // 椭圆形
 | ||||||
| class ShapeEllipse : | class ShapeEllipse : | ||||||
| 	public Shape | 	public ShapeBase | ||||||
| { | { | ||||||
| public: | public: | ||||||
| 	// 创建一个默认椭圆
 | 	// 创建一个默认椭圆
 | ||||||
|  |  | ||||||
|  | @ -8,6 +8,7 @@ namespace e2d | ||||||
| class TimerManager; | class TimerManager; | ||||||
| class MusicManager; | class MusicManager; | ||||||
| class InputManager; | class InputManager; | ||||||
|  | class CollisionManager; | ||||||
| 
 | 
 | ||||||
| // 随机数产生器
 | // 随机数产生器
 | ||||||
| class Random | class Random | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue