Magic_Game/Easy2D/Object/Sprite.cpp

118 lines
2.0 KiB
C++
Raw Normal View History

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()
{
SAFE_RELEASE(m_pImage);
}
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>ͼƬ
if (!m_bDisplay || m_pImage->m_Image.IsNull())
{
return;
}
// <20><><EFBFBD><EFBFBD>ͼƬ
if (m_pImage->m_Image.GetBPP() == 32)
{
m_pImage->m_Image.AlphaBlend(GetImageHDC(), getRect(), m_pImage->m_SrcRect, m_nAlpha, AC_SRC_OVER);
}
else
{
m_pImage->m_Image.Draw(GetImageHDC(), getRect(), m_pImage->m_SrcRect);
}
}
void Sprite::setImage(Image * image)
{
SAFE_RELEASE(m_pImage);
m_pImage = image;
setSize(int(m_pImage->getWidth() * m_fScaleX), int(m_pImage->getHeight() * m_fScaleY));
m_pImage->retain();
}
bool Sprite::isCollisionWith(Sprite * sprite)
{
return IntersectRect(NULL, &getRect(), &sprite->getRect());
}
void Sprite::addAction(Action * action)
{
if (action)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Sprite <20><><EFBFBD><EFBFBD>
action->m_pParent = this;
// <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);
}
}
void Sprite::pauseAllAction()
{
ActionManager::pauseSpriteAllActions(this);
}
void Sprite::resumeAllAction()
{
ActionManager::resumeSpriteAllActions(this);
}
void Sprite::stopAllAction()
{
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);
}