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 10:19:04 +08:00
|
|
|
|
static CRect rt;
|
|
|
|
|
|
return IntersectRect(&rt, &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-09 10:56:19 +08:00
|
|
|
|
void Sprite::runAction(Action * action)
|
|
|
|
|
|
{
|
|
|
|
|
|
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);
|
|
|
|
|
|
}
|