| 
									
										
										
										
											2017-09-27 17:56:28 +08:00
										 |  |  |  | #include "..\easy2d.h"
 | 
					
						
							|  |  |  |  | #include "..\EasyX\easyx.h"
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | Sprite::Sprite() : | 
					
						
							|  |  |  |  | 	m_nAlpha(255), | 
					
						
							|  |  |  |  | 	m_fScaleX(1), | 
					
						
							|  |  |  |  | 	m_fScaleY(1), | 
					
						
							|  |  |  |  | 	m_pImage(nullptr) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | Sprite::Sprite(Image * image) : | 
					
						
							|  |  |  |  | 	Sprite() | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	setImage(image); | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | Sprite::Sprite(LPCTSTR imageFileName) : | 
					
						
							|  |  |  |  | 	Sprite() | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	setImage(new Image(imageFileName)); | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | Sprite::~Sprite() | 
					
						
							|  |  |  |  | { | 
					
						
							| 
									
										
										
										
											2017-10-05 00:53:03 +08:00
										 |  |  |  | 	SafeRelease(m_pImage); | 
					
						
							| 
									
										
										
										
											2017-09-27 17:56:28 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | bool Sprite::_exec(bool active) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	return false; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | void Sprite::_onDraw() | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	// display <20><><EFBFBD><EFBFBD>Ϊ false<73><65><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>ͼƬ<CDBC><C6AC>Դʱ<D4B4><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƹ<EFBFBD>ͼƬ
 | 
					
						
							| 
									
										
										
										
											2017-10-08 12:57:27 +08:00
										 |  |  |  | 	if (!m_bDisplay || !m_pImage || !m_pImage->m_pCImage) | 
					
						
							| 
									
										
										
										
											2017-09-27 17:56:28 +08:00
										 |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		return; | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD>ͼƬ
 | 
					
						
							| 
									
										
										
										
											2017-10-01 14:39:39 +08:00
										 |  |  |  | 	if (m_pImage->m_pCImage->GetBPP() == 32) | 
					
						
							| 
									
										
										
										
											2017-09-27 17:56:28 +08:00
										 |  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2017-10-01 14:39:39 +08:00
										 |  |  |  | 		m_pImage->m_pCImage->AlphaBlend(GetImageHDC(), getRect(), m_pImage->m_SrcRect, m_nAlpha, AC_SRC_OVER); | 
					
						
							| 
									
										
										
										
											2017-09-27 17:56:28 +08:00
										 |  |  |  | 	} | 
					
						
							|  |  |  |  | 	else | 
					
						
							|  |  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2017-10-01 14:39:39 +08:00
										 |  |  |  | 		m_pImage->m_pCImage->Draw(GetImageHDC(), getRect(), m_pImage->m_SrcRect); | 
					
						
							| 
									
										
										
										
											2017-09-27 17:56:28 +08:00
										 |  |  |  | 	} | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | void Sprite::setImage(Image * image) | 
					
						
							|  |  |  |  | { | 
					
						
							| 
									
										
										
										
											2017-10-05 00:53:03 +08:00
										 |  |  |  | 	SafeRelease(m_pImage); | 
					
						
							| 
									
										
										
										
											2017-09-27 17:56:28 +08:00
										 |  |  |  | 	m_pImage = image; | 
					
						
							|  |  |  |  | 	setSize(int(m_pImage->getWidth() * m_fScaleX), int(m_pImage->getHeight() * m_fScaleY)); | 
					
						
							|  |  |  |  | 	m_pImage->retain(); | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | bool Sprite::isCollisionWith(Sprite * sprite) | 
					
						
							|  |  |  |  | { | 
					
						
							| 
									
										
										
										
											2017-10-09 01:16:08 +08:00
										 |  |  |  | 	return IntersectRect(new CRect(), &getRect(), &sprite->getRect()); | 
					
						
							| 
									
										
										
										
											2017-09-27 17:56:28 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | void Sprite::addAction(Action * action) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	if (action) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Sprite <20><><EFBFBD><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2017-10-06 02:32:33 +08:00
										 |  |  |  | 		action->m_pTargetSprite = this; | 
					
						
							| 
									
										
										
										
											2017-09-27 17:56:28 +08:00
										 |  |  |  | 		// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>붯<EFBFBD><EBB6AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ᴦ<EFBFBD><E1B4A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 		ActionManager::addAction(action); | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-08 12:43:22 +08:00
										 |  |  |  | void Sprite::resumeAction(Action * action) | 
					
						
							|  |  |  |  | { | 
					
						
							| 
									
										
										
										
											2017-10-08 12:45:59 +08:00
										 |  |  |  | 	if (action->getTarget() == this) | 
					
						
							| 
									
										
										
										
											2017-10-08 12:43:22 +08:00
										 |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		ActionManager::resumeAction(action); | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | void Sprite::pauseAction(Action * action) | 
					
						
							|  |  |  |  | { | 
					
						
							| 
									
										
										
										
											2017-10-08 12:45:59 +08:00
										 |  |  |  | 	if (action->getTarget() == this) | 
					
						
							| 
									
										
										
										
											2017-10-08 12:43:22 +08:00
										 |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		ActionManager::pauseAction(action); | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | void Sprite::stopAction(Action * action) | 
					
						
							|  |  |  |  | { | 
					
						
							| 
									
										
										
										
											2017-10-08 12:45:59 +08:00
										 |  |  |  | 	if (action->getTarget() == this) | 
					
						
							| 
									
										
										
										
											2017-10-08 12:43:22 +08:00
										 |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		ActionManager::stopAction(action); | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-29 17:55:33 +08:00
										 |  |  |  | void Sprite::pauseAllActions() | 
					
						
							| 
									
										
										
										
											2017-09-27 17:56:28 +08:00
										 |  |  |  | { | 
					
						
							|  |  |  |  | 	ActionManager::pauseSpriteAllActions(this); | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-29 17:55:33 +08:00
										 |  |  |  | void Sprite::resumeAllActions() | 
					
						
							| 
									
										
										
										
											2017-09-27 17:56:28 +08:00
										 |  |  |  | { | 
					
						
							|  |  |  |  | 	ActionManager::resumeSpriteAllActions(this); | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-29 17:55:33 +08:00
										 |  |  |  | void Sprite::stopAllActions() | 
					
						
							| 
									
										
										
										
											2017-09-27 17:56:28 +08:00
										 |  |  |  | { | 
					
						
							|  |  |  |  | 	ActionManager::stopSpriteAllActions(this); | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | float Sprite::getScaleX() const | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	return m_fScaleX; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | float Sprite::getScaleY() const | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	return m_fScaleY; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | float Sprite::getOpacity() const | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	return m_nAlpha / 255.0f; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | void Sprite::setScale(float scaleX, float scaleY) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	m_fScaleX = max(scaleX, 0); | 
					
						
							|  |  |  |  | 	m_fScaleY = max(scaleY, 0); | 
					
						
							|  |  |  |  | 	setSize(int(m_pImage->getWidth() * scaleX), int(m_pImage->getHeight() * scaleY)); | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | void Sprite::setOpacity(float opacity) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	m_nAlpha = BYTE(min(max(opacity, 0), 1) * 255); | 
					
						
							|  |  |  |  | } |