细节调整;去除Transition构造器
This commit is contained in:
parent
83a90fcb0e
commit
4a62b2a5bf
|
|
@ -6,7 +6,7 @@ e2d::Action::Action()
|
|||
, _done(false)
|
||||
, _initialized(false)
|
||||
, _target(nullptr)
|
||||
, _fLast(0)
|
||||
, _last(0)
|
||||
{
|
||||
ActionManager::__add(this);
|
||||
}
|
||||
|
|
@ -35,7 +35,7 @@ bool e2d::Action::isRunning()
|
|||
void e2d::Action::resume()
|
||||
{
|
||||
_running = true;
|
||||
_fLast = Time::getTotalTime();
|
||||
_last = Time::getTotalTime();
|
||||
}
|
||||
|
||||
void e2d::Action::pause()
|
||||
|
|
@ -78,7 +78,7 @@ void e2d::Action::_init()
|
|||
{
|
||||
_initialized = true;
|
||||
// 记录当前时间
|
||||
_fLast = Time::getTotalTime();
|
||||
_last = Time::getTotalTime();
|
||||
}
|
||||
|
||||
void e2d::Action::_update()
|
||||
|
|
@ -93,10 +93,10 @@ void e2d::Action::reset()
|
|||
{
|
||||
_initialized = false;
|
||||
_done = false;
|
||||
_fLast = Time::getTotalTime();
|
||||
_last = Time::getTotalTime();
|
||||
}
|
||||
|
||||
void e2d::Action::_resetTime()
|
||||
{
|
||||
_fLast = Time::getTotalTime();
|
||||
_last = Time::getTotalTime();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ void e2d::ActionGradual::_update()
|
|||
return;
|
||||
}
|
||||
// 计算动画进度
|
||||
_delta = min((Time::getTotalTime() - _fLast) / _duration, 1);
|
||||
_delta = min((Time::getTotalTime() - _last) / _duration, 1);
|
||||
// 判断动作是否结束
|
||||
if (_delta >= 1)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -87,10 +87,10 @@ void e2d::Animation::_update()
|
|||
}
|
||||
|
||||
// 判断时间间隔是否足够
|
||||
while ((Time::getTotalTime() - _fLast) >= _interval)
|
||||
while ((Time::getTotalTime() - _last) >= _interval)
|
||||
{
|
||||
// 重新记录时间
|
||||
_fLast += _interval;
|
||||
_last += _interval;
|
||||
// 加载关键帧
|
||||
static_cast<Sprite*>(_target)->open(_frames[_frameIndex]);
|
||||
_frameIndex++;
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ void e2d::Delay::_update()
|
|||
{
|
||||
Action::_update();
|
||||
// 判断时间间隔是否足够
|
||||
if ((Time::getTotalTime() - _fLast) >= _delay)
|
||||
if ((Time::getTotalTime() - _last) >= _delay)
|
||||
{
|
||||
this->stop();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,73 +3,73 @@
|
|||
#include "..\e2dnode.h"
|
||||
|
||||
e2d::Collider::Collider()
|
||||
: _bIsVisiable(true)
|
||||
, _nColor(Color::RED, 0.7f)
|
||||
, _pParentNode(nullptr)
|
||||
, _pTransformedGeometry(nullptr)
|
||||
, _bEnable(true)
|
||||
, _bAutoResize(true)
|
||||
: _visiable(true)
|
||||
, _color(Color::RED, 0.7f)
|
||||
, _parentNode(nullptr)
|
||||
, _transformed(nullptr)
|
||||
, _enable(true)
|
||||
, _autoResize(true)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::Collider::~Collider()
|
||||
{
|
||||
SafeReleaseInterface(&_pTransformedGeometry);
|
||||
SafeReleaseInterface(&_transformed);
|
||||
}
|
||||
|
||||
e2d::Node * e2d::Collider::getParentNode() const
|
||||
{
|
||||
return _pParentNode;
|
||||
return _parentNode;
|
||||
}
|
||||
|
||||
e2d::Color e2d::Collider::getColor() const
|
||||
{
|
||||
return _nColor;
|
||||
return _color;
|
||||
}
|
||||
|
||||
void e2d::Collider::setEnable(bool enable)
|
||||
{
|
||||
_bEnable = enable;
|
||||
_enable = enable;
|
||||
}
|
||||
|
||||
void e2d::Collider::setVisiable(bool bVisiable)
|
||||
{
|
||||
_bIsVisiable = bVisiable;
|
||||
_visiable = bVisiable;
|
||||
}
|
||||
|
||||
void e2d::Collider::setColor(Color color)
|
||||
{
|
||||
_nColor = color;
|
||||
_color = color;
|
||||
}
|
||||
|
||||
void e2d::Collider::setAutoResize(bool enable)
|
||||
{
|
||||
_bAutoResize = enable;
|
||||
_autoResize = enable;
|
||||
}
|
||||
|
||||
void e2d::Collider::_render()
|
||||
{
|
||||
if (_pTransformedGeometry && _bEnable)
|
||||
if (_transformed && _enable)
|
||||
{
|
||||
// 获取纯色画刷
|
||||
ID2D1SolidColorBrush * pBrush = Renderer::getSolidColorBrush();
|
||||
// 设置画刷颜色和透明度
|
||||
pBrush->SetColor(_nColor.toColorF());
|
||||
pBrush->SetColor(_color.toColorF());
|
||||
// 绘制几何碰撞体
|
||||
Renderer::getRenderTarget()->DrawGeometry(_pTransformedGeometry, pBrush);
|
||||
Renderer::getRenderTarget()->DrawGeometry(_transformed, pBrush);
|
||||
}
|
||||
}
|
||||
|
||||
e2d::Relation e2d::Collider::getRelationWith(Collider * pCollider) const
|
||||
{
|
||||
if (_pTransformedGeometry && pCollider->_pTransformedGeometry)
|
||||
if (_transformed && pCollider->_transformed)
|
||||
{
|
||||
if (_bEnable && pCollider->_bEnable)
|
||||
if (_enable && pCollider->_enable)
|
||||
{
|
||||
D2D1_GEOMETRY_RELATION relation;
|
||||
|
||||
_pTransformedGeometry->CompareWithGeometry(
|
||||
pCollider->_pTransformedGeometry,
|
||||
_transformed->CompareWithGeometry(
|
||||
pCollider->_transformed,
|
||||
D2D1::Matrix3x2F::Identity(),
|
||||
&relation
|
||||
);
|
||||
|
|
@ -82,21 +82,21 @@ e2d::Relation e2d::Collider::getRelationWith(Collider * pCollider) const
|
|||
|
||||
void e2d::Collider::_transform()
|
||||
{
|
||||
if (_pParentNode && _bEnable)
|
||||
if (_parentNode && _enable)
|
||||
{
|
||||
if (_bAutoResize)
|
||||
if (_autoResize)
|
||||
{
|
||||
this->_resize();
|
||||
}
|
||||
|
||||
// 释放原碰撞体
|
||||
SafeReleaseInterface(&_pTransformedGeometry);
|
||||
SafeReleaseInterface(&_transformed);
|
||||
|
||||
// 根据父节点转换几何图形
|
||||
Renderer::getID2D1Factory()->CreateTransformedGeometry(
|
||||
getD2dGeometry(),
|
||||
_pParentNode->_MatriFinal,
|
||||
&_pTransformedGeometry
|
||||
_parentNode->_finalMatri,
|
||||
&_transformed
|
||||
);
|
||||
|
||||
ColliderManager::__updateCollider(this);
|
||||
|
|
|
|||
|
|
@ -2,18 +2,18 @@
|
|||
#include "..\e2dnode.h"
|
||||
|
||||
e2d::ColliderCircle::ColliderCircle()
|
||||
: _pD2dCircle(nullptr)
|
||||
: _d2dCircle(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::ColliderCircle::ColliderCircle(Point center, double radius)
|
||||
: _pD2dCircle(nullptr)
|
||||
: _d2dCircle(nullptr)
|
||||
{
|
||||
this->setCircle(center, radius);
|
||||
}
|
||||
|
||||
e2d::ColliderCircle::ColliderCircle(Node * node)
|
||||
: _pD2dCircle(nullptr)
|
||||
: _d2dCircle(nullptr)
|
||||
{
|
||||
double minSide = min(node->getRealWidth(), node->getRealHeight());
|
||||
this->setCircle(
|
||||
|
|
@ -27,33 +27,33 @@ e2d::ColliderCircle::ColliderCircle(Node * node)
|
|||
|
||||
e2d::ColliderCircle::~ColliderCircle()
|
||||
{
|
||||
SafeReleaseInterface(&_pD2dCircle);
|
||||
SafeReleaseInterface(&_d2dCircle);
|
||||
}
|
||||
|
||||
void e2d::ColliderCircle::setCircle(Point center, double radius)
|
||||
{
|
||||
SafeReleaseInterface(&_pD2dCircle);
|
||||
SafeReleaseInterface(&_d2dCircle);
|
||||
|
||||
Renderer::getID2D1Factory()->CreateEllipseGeometry(
|
||||
D2D1::Ellipse(
|
||||
D2D1::Point2F(
|
||||
static_cast<float>(center.x),
|
||||
static_cast<float>(center.y)),
|
||||
static_cast<float>(radius),
|
||||
static_cast<float>(radius)),
|
||||
&_pD2dCircle
|
||||
float(center.x),
|
||||
float(center.y)),
|
||||
float(radius),
|
||||
float(radius)),
|
||||
&_d2dCircle
|
||||
);
|
||||
}
|
||||
|
||||
void e2d::ColliderCircle::_resize()
|
||||
{
|
||||
if (_pParentNode && _bEnable)
|
||||
if (_parentNode && _enable)
|
||||
{
|
||||
double minSide = min(_pParentNode->getRealWidth(), _pParentNode->getRealHeight());
|
||||
double minSide = min(_parentNode->getRealWidth(), _parentNode->getRealHeight());
|
||||
this->setCircle(
|
||||
Point(
|
||||
_pParentNode->getRealWidth() / 2,
|
||||
_pParentNode->getRealHeight() / 2
|
||||
_parentNode->getRealWidth() / 2,
|
||||
_parentNode->getRealHeight() / 2
|
||||
),
|
||||
minSide / 2
|
||||
);
|
||||
|
|
@ -62,5 +62,5 @@ void e2d::ColliderCircle::_resize()
|
|||
|
||||
ID2D1EllipseGeometry * e2d::ColliderCircle::getD2dGeometry() const
|
||||
{
|
||||
return _pD2dCircle;
|
||||
return _d2dCircle;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,18 +2,18 @@
|
|||
#include "..\e2dnode.h"
|
||||
|
||||
e2d::ColliderEllipse::ColliderEllipse()
|
||||
: _pD2dEllipse(nullptr)
|
||||
: _d2dEllipse(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::ColliderEllipse::ColliderEllipse(Point center, double radiusX, double radiusY)
|
||||
: _pD2dEllipse(nullptr)
|
||||
: _d2dEllipse(nullptr)
|
||||
{
|
||||
this->setEllipse(center, radiusX, radiusY);
|
||||
}
|
||||
|
||||
e2d::ColliderEllipse::ColliderEllipse(Node * node)
|
||||
: _pD2dEllipse(nullptr)
|
||||
: _d2dEllipse(nullptr)
|
||||
{
|
||||
this->setEllipse(
|
||||
Point(
|
||||
|
|
@ -27,40 +27,40 @@ e2d::ColliderEllipse::ColliderEllipse(Node * node)
|
|||
|
||||
e2d::ColliderEllipse::~ColliderEllipse()
|
||||
{
|
||||
SafeReleaseInterface(&_pD2dEllipse);
|
||||
SafeReleaseInterface(&_d2dEllipse);
|
||||
}
|
||||
|
||||
void e2d::ColliderEllipse::setEllipse(Point center, double radiusX, double radiusY)
|
||||
{
|
||||
SafeReleaseInterface(&_pD2dEllipse);
|
||||
SafeReleaseInterface(&_d2dEllipse);
|
||||
|
||||
Renderer::getID2D1Factory()->CreateEllipseGeometry(
|
||||
D2D1::Ellipse(
|
||||
D2D1::Point2F(
|
||||
static_cast<float>(center.x),
|
||||
static_cast<float>(center.y)),
|
||||
static_cast<float>(radiusX),
|
||||
static_cast<float>(radiusY)),
|
||||
&_pD2dEllipse
|
||||
float(center.x),
|
||||
float(center.y)),
|
||||
float(radiusX),
|
||||
float(radiusY)),
|
||||
&_d2dEllipse
|
||||
);
|
||||
}
|
||||
|
||||
void e2d::ColliderEllipse::_resize()
|
||||
{
|
||||
if (_pParentNode && _bEnable)
|
||||
if (_parentNode && _enable)
|
||||
{
|
||||
this->setEllipse(
|
||||
Point(
|
||||
_pParentNode->getWidth() / 2,
|
||||
_pParentNode->getHeight() / 2
|
||||
_parentNode->getWidth() / 2,
|
||||
_parentNode->getHeight() / 2
|
||||
),
|
||||
_pParentNode->getWidth() / 2,
|
||||
_pParentNode->getHeight() / 2
|
||||
_parentNode->getWidth() / 2,
|
||||
_parentNode->getHeight() / 2
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
ID2D1EllipseGeometry * e2d::ColliderEllipse::getD2dGeometry() const
|
||||
{
|
||||
return _pD2dEllipse;
|
||||
return _d2dEllipse;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,50 +2,50 @@
|
|||
#include "..\e2dnode.h"
|
||||
|
||||
e2d::ColliderRect::ColliderRect()
|
||||
: _pD2dRectangle(nullptr)
|
||||
: _d2dRectangle(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::ColliderRect::ColliderRect(double x, double y, double width, double height)
|
||||
: _pD2dRectangle(nullptr)
|
||||
: _d2dRectangle(nullptr)
|
||||
{
|
||||
this->setRect(x, y, x + width, y + height);
|
||||
}
|
||||
|
||||
e2d::ColliderRect::ColliderRect(Node * node)
|
||||
: _pD2dRectangle(nullptr)
|
||||
: _d2dRectangle(nullptr)
|
||||
{
|
||||
this->setRect(0, 0, node->getRealWidth(), node->getRealHeight());
|
||||
}
|
||||
|
||||
e2d::ColliderRect::~ColliderRect()
|
||||
{
|
||||
SafeReleaseInterface(&_pD2dRectangle);
|
||||
SafeReleaseInterface(&_d2dRectangle);
|
||||
}
|
||||
|
||||
void e2d::ColliderRect::setRect(double left, double top, double right, double bottom)
|
||||
{
|
||||
SafeReleaseInterface(&_pD2dRectangle);
|
||||
SafeReleaseInterface(&_d2dRectangle);
|
||||
|
||||
Renderer::getID2D1Factory()->CreateRectangleGeometry(
|
||||
D2D1::RectF(
|
||||
static_cast<float>(left),
|
||||
static_cast<float>(top),
|
||||
static_cast<float>(right),
|
||||
static_cast<float>(bottom)),
|
||||
&_pD2dRectangle
|
||||
float(left),
|
||||
float(top),
|
||||
float(right),
|
||||
float(bottom)),
|
||||
&_d2dRectangle
|
||||
);
|
||||
}
|
||||
|
||||
void e2d::ColliderRect::_resize()
|
||||
{
|
||||
if (_pParentNode && _bEnable)
|
||||
if (_parentNode && _enable)
|
||||
{
|
||||
this->setRect( 0, 0, _pParentNode->getRealWidth(), _pParentNode->getRealHeight());
|
||||
this->setRect( 0, 0, _parentNode->getRealWidth(), _parentNode->getRealHeight());
|
||||
}
|
||||
}
|
||||
|
||||
ID2D1RectangleGeometry * e2d::ColliderRect::getD2dGeometry() const
|
||||
{
|
||||
return _pD2dRectangle;
|
||||
return _d2dRectangle;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,18 +17,18 @@ e2d::Color::Color()
|
|||
}
|
||||
|
||||
e2d::Color::Color(double r, double g, double b)
|
||||
: r(static_cast<float>(r))
|
||||
, g(static_cast<float>(g))
|
||||
, b(static_cast<float>(b))
|
||||
, a(static_cast<float>(1))
|
||||
: r(float(r))
|
||||
, g(float(g))
|
||||
, b(float(b))
|
||||
, a(float(1))
|
||||
{
|
||||
}
|
||||
|
||||
e2d::Color::Color(double r, double g, double b, double alpha)
|
||||
: r(static_cast<float>(r))
|
||||
, g(static_cast<float>(g))
|
||||
, b(static_cast<float>(b))
|
||||
, a(static_cast<float>(alpha))
|
||||
: r(float(r))
|
||||
, g(float(g))
|
||||
, b(float(b))
|
||||
, a(float(alpha))
|
||||
{
|
||||
}
|
||||
|
||||
|
|
@ -44,10 +44,10 @@ e2d::Color::Color(UINT32 rgb, double alpha)
|
|||
|
||||
void e2d::Color::_init(UINT32 rgb, double alpha)
|
||||
{
|
||||
r = static_cast<float>((rgb & sc_redMask) >> sc_redShift) / 255.f;
|
||||
g = static_cast<float>((rgb & sc_greenMask) >> sc_greenShift) / 255.f;
|
||||
b = static_cast<float>((rgb & sc_blueMask) >> sc_blueShift) / 255.f;
|
||||
a = static_cast<float>(alpha);
|
||||
r = float((rgb & sc_redMask) >> sc_redShift) / 255.f;
|
||||
g = float((rgb & sc_greenMask) >> sc_greenShift) / 255.f;
|
||||
b = float((rgb & sc_blueMask) >> sc_blueShift) / 255.f;
|
||||
a = float(alpha);
|
||||
}
|
||||
|
||||
D2D1_COLOR_F e2d::Color::toColorF() const
|
||||
|
|
|
|||
|
|
@ -6,35 +6,35 @@ static std::map<int, ID2D1Bitmap*> s_mBitmapsFromResource;
|
|||
|
||||
|
||||
e2d::Image::Image()
|
||||
: _pBitmap(nullptr)
|
||||
, _fSourceCropX(0)
|
||||
, _fSourceCropY(0)
|
||||
, _fSourceCropWidth(0)
|
||||
, _fSourceCropHeight(0)
|
||||
: _bitmap(nullptr)
|
||||
, _cropX(0)
|
||||
, _cropY(0)
|
||||
, _cropWidth(0)
|
||||
, _cropHeight(0)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::Image::Image(const String& filePath)
|
||||
: _pBitmap(nullptr)
|
||||
: _bitmap(nullptr)
|
||||
{
|
||||
this->open(filePath);
|
||||
}
|
||||
|
||||
e2d::Image::Image(int resNameId, const String& resType)
|
||||
: _pBitmap(nullptr)
|
||||
: _bitmap(nullptr)
|
||||
{
|
||||
this->open(resNameId, resType);
|
||||
}
|
||||
|
||||
e2d::Image::Image(const String& filePath, double cropX, double cropY, double cropWidth, double cropHeight)
|
||||
: _pBitmap(nullptr)
|
||||
: _bitmap(nullptr)
|
||||
{
|
||||
this->open(filePath);
|
||||
this->crop(cropX, cropY, cropWidth, cropHeight);
|
||||
}
|
||||
|
||||
e2d::Image::Image(int resNameId, const String& resType, double cropX, double cropY, double cropWidth, double cropHeight)
|
||||
: _pBitmap(nullptr)
|
||||
: _bitmap(nullptr)
|
||||
{
|
||||
this->open(resNameId, resType);
|
||||
this->crop(cropX, cropY, cropWidth, cropHeight);
|
||||
|
|
@ -57,10 +57,10 @@ bool e2d::Image::open(const String& filePath)
|
|||
return false;
|
||||
}
|
||||
|
||||
_pBitmap = s_mBitmapsFromFile.at(filePath.getHashCode());
|
||||
_fSourceCropX = _fSourceCropY = 0;
|
||||
_fSourceCropWidth = _pBitmap->GetSize().width;
|
||||
_fSourceCropHeight = _pBitmap->GetSize().height;
|
||||
_bitmap = s_mBitmapsFromFile.at(filePath.getHashCode());
|
||||
_cropX = _cropY = 0;
|
||||
_cropWidth = _bitmap->GetSize().width;
|
||||
_cropHeight = _bitmap->GetSize().height;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -72,44 +72,44 @@ bool e2d::Image::open(int resNameId, const String& resType)
|
|||
return false;
|
||||
}
|
||||
|
||||
_pBitmap = s_mBitmapsFromResource.at(resNameId);
|
||||
_fSourceCropX = _fSourceCropY = 0;
|
||||
_fSourceCropWidth = _pBitmap->GetSize().width;
|
||||
_fSourceCropHeight = _pBitmap->GetSize().height;
|
||||
_bitmap = s_mBitmapsFromResource.at(resNameId);
|
||||
_cropX = _cropY = 0;
|
||||
_cropWidth = _bitmap->GetSize().width;
|
||||
_cropHeight = _bitmap->GetSize().height;
|
||||
return true;
|
||||
}
|
||||
|
||||
void e2d::Image::crop(double x, double y, double width, double height)
|
||||
{
|
||||
if (_pBitmap)
|
||||
if (_bitmap)
|
||||
{
|
||||
_fSourceCropX = min(max(x, 0), this->getSourceWidth());
|
||||
_fSourceCropY = min(max(y, 0), this->getSourceHeight());
|
||||
_fSourceCropWidth = min(max(width, 0), this->getSourceWidth() - _fSourceCropX);
|
||||
_fSourceCropHeight = min(max(height, 0), this->getSourceHeight() - _fSourceCropY);
|
||||
_cropX = min(max(x, 0), this->getSourceWidth());
|
||||
_cropY = min(max(y, 0), this->getSourceHeight());
|
||||
_cropWidth = min(max(width, 0), this->getSourceWidth() - _cropX);
|
||||
_cropHeight = min(max(height, 0), this->getSourceHeight() - _cropY);
|
||||
}
|
||||
}
|
||||
|
||||
double e2d::Image::getWidth() const
|
||||
{
|
||||
return _fSourceCropWidth;
|
||||
return _cropWidth;
|
||||
}
|
||||
|
||||
double e2d::Image::getHeight() const
|
||||
{
|
||||
return _fSourceCropHeight;
|
||||
return _cropHeight;
|
||||
}
|
||||
|
||||
e2d::Size e2d::Image::getSize() const
|
||||
{
|
||||
return Size(_fSourceCropWidth, _fSourceCropHeight);
|
||||
return Size(_cropWidth, _cropHeight);
|
||||
}
|
||||
|
||||
double e2d::Image::getSourceWidth() const
|
||||
{
|
||||
if (_pBitmap)
|
||||
if (_bitmap)
|
||||
{
|
||||
return _pBitmap->GetSize().width;
|
||||
return _bitmap->GetSize().width;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -119,9 +119,9 @@ double e2d::Image::getSourceWidth() const
|
|||
|
||||
double e2d::Image::getSourceHeight() const
|
||||
{
|
||||
if (_pBitmap)
|
||||
if (_bitmap)
|
||||
{
|
||||
return _pBitmap->GetSize().height;
|
||||
return _bitmap->GetSize().height;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -131,7 +131,7 @@ double e2d::Image::getSourceHeight() const
|
|||
|
||||
e2d::Size e2d::Image::getSourceSize() const
|
||||
{
|
||||
if (_pBitmap)
|
||||
if (_bitmap)
|
||||
{
|
||||
return Size(getSourceWidth(), getSourceHeight());
|
||||
}
|
||||
|
|
@ -143,17 +143,17 @@ e2d::Size e2d::Image::getSourceSize() const
|
|||
|
||||
double e2d::Image::getCropX() const
|
||||
{
|
||||
return _fSourceCropX;
|
||||
return _cropX;
|
||||
}
|
||||
|
||||
double e2d::Image::getCropY() const
|
||||
{
|
||||
return _fSourceCropY;
|
||||
return _cropY;
|
||||
}
|
||||
|
||||
e2d::Point e2d::Image::getCropPos() const
|
||||
{
|
||||
return Point(_fSourceCropX, _fSourceCropY);
|
||||
return Point(_cropX, _cropY);
|
||||
}
|
||||
|
||||
bool e2d::Image::preload(const String& fileName)
|
||||
|
|
@ -376,5 +376,5 @@ void e2d::Image::clearCache()
|
|||
|
||||
ID2D1Bitmap * e2d::Image::getBitmap()
|
||||
{
|
||||
return _pBitmap;
|
||||
return _bitmap;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
#include "..\e2dmanager.h"
|
||||
|
||||
e2d::Object::Object()
|
||||
: _nRefCount(0)
|
||||
: _refCount(0)
|
||||
{
|
||||
ObjectManager::__add(this);
|
||||
}
|
||||
|
|
@ -14,18 +14,18 @@ e2d::Object::~Object()
|
|||
// 引用计数加一
|
||||
void e2d::Object::retain()
|
||||
{
|
||||
_nRefCount++;
|
||||
_refCount++;
|
||||
}
|
||||
|
||||
// 引用计数减一
|
||||
void e2d::Object::release()
|
||||
{
|
||||
_nRefCount--;
|
||||
_refCount--;
|
||||
// 通知对象管理池刷新
|
||||
ObjectManager::flush();
|
||||
}
|
||||
|
||||
int e2d::Object::getRefCount() const
|
||||
{
|
||||
return _nRefCount;
|
||||
return _refCount;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,14 +3,12 @@
|
|||
#include "..\e2dmanager.h"
|
||||
|
||||
e2d::Scene::Scene()
|
||||
: _bWillSave(true)
|
||||
, _bAutoUpdate(true)
|
||||
, _bSortNeeded(false)
|
||||
, _bColliderVisiable(false)
|
||||
, _pRoot(new Node())
|
||||
: _autoUpdate(true)
|
||||
, _colliderVisiable(false)
|
||||
, _root(new Node())
|
||||
{
|
||||
_pRoot->retain();
|
||||
_pRoot->_setParentScene(this);
|
||||
_root->retain();
|
||||
_root->_setParentScene(this);
|
||||
}
|
||||
|
||||
e2d::Scene::~Scene()
|
||||
|
|
@ -19,36 +17,36 @@ e2d::Scene::~Scene()
|
|||
|
||||
void e2d::Scene::_render()
|
||||
{
|
||||
_pRoot->_render();
|
||||
_root->_render();
|
||||
|
||||
if (_bColliderVisiable)
|
||||
if (_colliderVisiable)
|
||||
{
|
||||
// 恢复矩阵转换
|
||||
Renderer::getRenderTarget()->SetTransform(D2D1::Matrix3x2F::Identity());
|
||||
// 绘制所有几何图形
|
||||
_pRoot->_drawCollider();
|
||||
_root->_drawCollider();
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::Scene::_update()
|
||||
{
|
||||
// 执行 onUpdate 函数
|
||||
if (_bAutoUpdate)
|
||||
if (_autoUpdate)
|
||||
{
|
||||
this->onUpdate();
|
||||
}
|
||||
// 更新根节点
|
||||
_pRoot->_update();
|
||||
_root->_update();
|
||||
}
|
||||
|
||||
void e2d::Scene::setAutoUpdate(bool bAutoUpdate)
|
||||
{
|
||||
_bAutoUpdate = bAutoUpdate;
|
||||
_autoUpdate = bAutoUpdate;
|
||||
}
|
||||
|
||||
void e2d::Scene::add(Node * child, int order /* = 0 */)
|
||||
{
|
||||
_pRoot->addChild(child, order);
|
||||
_root->addChild(child, order);
|
||||
}
|
||||
|
||||
#ifdef HIGHER_THAN_VS2012
|
||||
|
|
@ -63,35 +61,35 @@ void e2d::Scene::add(const std::initializer_list<Node*>& vNodes, int order)
|
|||
|
||||
bool e2d::Scene::remove(Node * child)
|
||||
{
|
||||
return _pRoot->removeChild(child);
|
||||
return _root->removeChild(child);
|
||||
}
|
||||
|
||||
std::vector<e2d::Node*> e2d::Scene::get(const String& name) const
|
||||
{
|
||||
return _pRoot->getChildren(name);
|
||||
return _root->getChildren(name);
|
||||
}
|
||||
|
||||
e2d::Node * e2d::Scene::getOne(const String& name) const
|
||||
{
|
||||
return _pRoot->getChild(name);
|
||||
return _root->getChild(name);
|
||||
}
|
||||
|
||||
std::vector<e2d::Node*> e2d::Scene::getAll() const
|
||||
{
|
||||
return _pRoot->getAllChildren();
|
||||
return _root->getAllChildren();
|
||||
}
|
||||
|
||||
e2d::Node * e2d::Scene::getRoot() const
|
||||
{
|
||||
return _pRoot;
|
||||
return _root;
|
||||
}
|
||||
|
||||
void e2d::Scene::showCollider(bool visiable)
|
||||
{
|
||||
_bColliderVisiable = visiable;
|
||||
_colliderVisiable = visiable;
|
||||
}
|
||||
|
||||
void e2d::Scene::onDestroy()
|
||||
{
|
||||
SafeRelease(&_pRoot);
|
||||
SafeRelease(&_root);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -191,7 +191,7 @@ bool e2d::String::operator!=(const e2d::String &str)
|
|||
|
||||
wchar_t &e2d::String::operator[](int index)
|
||||
{
|
||||
return _str[static_cast<size_t>(index)];
|
||||
return _str[size_t(index)];
|
||||
}
|
||||
|
||||
e2d::String e2d::String::operator+(const wchar_t *str)
|
||||
|
|
@ -440,7 +440,7 @@ e2d::String e2d::String::subtract(int offset, int count) const
|
|||
|
||||
void e2d::String::insert(const String & str, int pos)
|
||||
{
|
||||
_str.insert(static_cast<size_t>(pos), str._str);
|
||||
_str.insert(size_t(pos), str._str);
|
||||
}
|
||||
|
||||
void e2d::String::replace(const String & from, const String & to)
|
||||
|
|
@ -458,13 +458,13 @@ void e2d::String::replace(const String & from, const String & to)
|
|||
|
||||
void e2d::String::erase(int offset, int count)
|
||||
{
|
||||
_str.erase(static_cast<size_t>(offset), static_cast<size_t>(count));
|
||||
_str.erase(size_t(offset), size_t(count));
|
||||
}
|
||||
|
||||
int e2d::String::find(const String & str, int offset) const
|
||||
{
|
||||
size_t index;
|
||||
if ((index = _str.find(str._str, static_cast<size_t>(offset))) == std::wstring::npos)
|
||||
if ((index = _str.find(str._str, size_t(offset))) == std::wstring::npos)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -81,7 +81,7 @@ void e2d::ColliderManager::__updateCollider(e2d::Collider * pActiveCollider)
|
|||
if (!s_bCollisionEnable)
|
||||
return;
|
||||
|
||||
Node* pActiveNode = pActiveCollider->_pParentNode;
|
||||
Node* pActiveNode = pActiveCollider->_parentNode;
|
||||
if (pActiveNode)
|
||||
{
|
||||
// 获取节点所在场景
|
||||
|
|
@ -96,7 +96,7 @@ void e2d::ColliderManager::__updateCollider(e2d::Collider * pActiveCollider)
|
|||
continue;
|
||||
|
||||
// 获取被碰撞节点
|
||||
Node* pPassiveNode = pPassiveCollider->_pParentNode;
|
||||
Node* pPassiveNode = pPassiveCollider->_parentNode;
|
||||
// 判断两节点是否处于同一场景中
|
||||
if (pPassiveNode &&
|
||||
pPassiveNode->getParentScene() == pCurrentScene)
|
||||
|
|
@ -105,7 +105,7 @@ void e2d::ColliderManager::__updateCollider(e2d::Collider * pActiveCollider)
|
|||
auto IsCollideWith = [](Node * active, Node * passive) -> bool
|
||||
{
|
||||
unsigned int hash = passive->getHashName();
|
||||
for (auto collider : active->_vColliders)
|
||||
for (auto collider : active->_colliders)
|
||||
if (collider == hash)
|
||||
return true;
|
||||
return false;
|
||||
|
|
@ -228,7 +228,7 @@ void e2d::ColliderManager::__addCollider(Collider * pCollider)
|
|||
{
|
||||
if (pCollider)
|
||||
{
|
||||
if (pCollider->_pParentNode)
|
||||
if (pCollider->_parentNode)
|
||||
{
|
||||
WARN_IF(true, "ColliderManager::__add Failed! The shape is already added.");
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -2,12 +2,13 @@
|
|||
#include "..\e2dbase.h"
|
||||
#include "..\e2dtransition.h"
|
||||
|
||||
static bool s_bSaveCurrScene = true;
|
||||
static e2d::Scene * s_pCurrScene = nullptr;
|
||||
static e2d::Scene * s_pNextScene = nullptr;
|
||||
static e2d::TransitionBase * s_pTransition = nullptr;
|
||||
static e2d::Transition * s_pTransition = nullptr;
|
||||
static std::stack<e2d::Scene*> s_SceneStack;
|
||||
|
||||
void e2d::SceneManager::enter(Scene * scene, TransitionBase * transition /* = nullptr */, bool saveCurrentScene /* = true */)
|
||||
void e2d::SceneManager::enter(Scene * scene, Transition * transition /* = nullptr */, bool saveCurrentScene /* = true */)
|
||||
{
|
||||
ASSERT(scene, "Next scene NULL pointer exception!");
|
||||
scene->retain();
|
||||
|
|
@ -31,11 +32,11 @@ void e2d::SceneManager::enter(Scene * scene, TransitionBase * transition /* = nu
|
|||
|
||||
if (s_pCurrScene)
|
||||
{
|
||||
s_pCurrScene->_bWillSave = saveCurrentScene;
|
||||
s_bSaveCurrScene = saveCurrentScene;
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::SceneManager::back(TransitionBase * transition /* = nullptr */)
|
||||
void e2d::SceneManager::back(Transition * transition /* = nullptr */)
|
||||
{
|
||||
// 栈为空时,调用返回场景函数失败
|
||||
WARN_IF(s_SceneStack.size() == 0, "Scene stack is empty!");
|
||||
|
|
@ -48,7 +49,7 @@ void e2d::SceneManager::back(TransitionBase * transition /* = nullptr */)
|
|||
// 返回上一场景时,不保存当前场景
|
||||
if (s_pCurrScene)
|
||||
{
|
||||
s_pCurrScene->_bWillSave = false;
|
||||
s_bSaveCurrScene = false;
|
||||
}
|
||||
|
||||
// 设置切换场景动画
|
||||
|
|
@ -120,7 +121,7 @@ void e2d::SceneManager::__update()
|
|||
s_pCurrScene->onExit();
|
||||
|
||||
// 若要保存当前场景,把它放入栈中
|
||||
if (s_pCurrScene->_bWillSave)
|
||||
if (s_bSaveCurrScene)
|
||||
{
|
||||
s_SceneStack.push(s_pCurrScene);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,25 +6,25 @@
|
|||
|
||||
e2d::Button::Button()
|
||||
: _func(nullptr)
|
||||
, _eBtnState(ButtonState::NORMAL)
|
||||
, _bEnable(true)
|
||||
, _bIsSelected(false)
|
||||
, _pNormal(nullptr)
|
||||
, _pMouseover(nullptr)
|
||||
, _pSelected(nullptr)
|
||||
, _pDisabled(nullptr)
|
||||
, _state(ButtonState::NORMAL)
|
||||
, _enable(true)
|
||||
, _isSelected(false)
|
||||
, _normal(nullptr)
|
||||
, _mouseover(nullptr)
|
||||
, _selected(nullptr)
|
||||
, _disabled(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::Button::Button(Node * normal, const Function& func)
|
||||
: _func(nullptr)
|
||||
, _eBtnState(ButtonState::NORMAL)
|
||||
, _bEnable(true)
|
||||
, _bIsSelected(false)
|
||||
, _pNormal(nullptr)
|
||||
, _pMouseover(nullptr)
|
||||
, _pSelected(nullptr)
|
||||
, _pDisabled(nullptr)
|
||||
, _state(ButtonState::NORMAL)
|
||||
, _enable(true)
|
||||
, _isSelected(false)
|
||||
, _normal(nullptr)
|
||||
, _mouseover(nullptr)
|
||||
, _selected(nullptr)
|
||||
, _disabled(nullptr)
|
||||
{
|
||||
this->setNormal(normal);
|
||||
this->setClickFunc(func);
|
||||
|
|
@ -32,13 +32,13 @@ e2d::Button::Button(Node * normal, const Function& func)
|
|||
|
||||
e2d::Button::Button(Node * normal, Node * selected, const Function& func)
|
||||
: _func(nullptr)
|
||||
, _eBtnState(ButtonState::NORMAL)
|
||||
, _bEnable(true)
|
||||
, _bIsSelected(false)
|
||||
, _pNormal(nullptr)
|
||||
, _pMouseover(nullptr)
|
||||
, _pSelected(nullptr)
|
||||
, _pDisabled(nullptr)
|
||||
, _state(ButtonState::NORMAL)
|
||||
, _enable(true)
|
||||
, _isSelected(false)
|
||||
, _normal(nullptr)
|
||||
, _mouseover(nullptr)
|
||||
, _selected(nullptr)
|
||||
, _disabled(nullptr)
|
||||
{
|
||||
this->setNormal(normal);
|
||||
this->setSelected(selected);
|
||||
|
|
@ -47,13 +47,13 @@ e2d::Button::Button(Node * normal, Node * selected, const Function& func)
|
|||
|
||||
e2d::Button::Button(Node * normal, Node * mouseover, Node * selected, const Function& func)
|
||||
: _func(nullptr)
|
||||
, _eBtnState(ButtonState::NORMAL)
|
||||
, _bEnable(true)
|
||||
, _bIsSelected(false)
|
||||
, _pNormal(nullptr)
|
||||
, _pMouseover(nullptr)
|
||||
, _pSelected(nullptr)
|
||||
, _pDisabled(nullptr)
|
||||
, _state(ButtonState::NORMAL)
|
||||
, _enable(true)
|
||||
, _isSelected(false)
|
||||
, _normal(nullptr)
|
||||
, _mouseover(nullptr)
|
||||
, _selected(nullptr)
|
||||
, _disabled(nullptr)
|
||||
{
|
||||
this->setNormal(normal);
|
||||
this->setMouseOver(mouseover);
|
||||
|
|
@ -63,13 +63,13 @@ e2d::Button::Button(Node * normal, Node * mouseover, Node * selected, const Func
|
|||
|
||||
e2d::Button::Button(Node * normal, Node * mouseover, Node * selected, Node * disabled, const Function& func)
|
||||
: _func(nullptr)
|
||||
, _eBtnState(ButtonState::NORMAL)
|
||||
, _bEnable(true)
|
||||
, _bIsSelected(false)
|
||||
, _pNormal(nullptr)
|
||||
, _pMouseover(nullptr)
|
||||
, _pSelected(nullptr)
|
||||
, _pDisabled(nullptr)
|
||||
, _state(ButtonState::NORMAL)
|
||||
, _enable(true)
|
||||
, _isSelected(false)
|
||||
, _normal(nullptr)
|
||||
, _mouseover(nullptr)
|
||||
, _selected(nullptr)
|
||||
, _disabled(nullptr)
|
||||
{
|
||||
this->setNormal(normal);
|
||||
this->setMouseOver(mouseover);
|
||||
|
|
@ -80,17 +80,17 @@ e2d::Button::Button(Node * normal, Node * mouseover, Node * selected, Node * dis
|
|||
|
||||
bool e2d::Button::isEnable() const
|
||||
{
|
||||
return _bEnable;
|
||||
return _enable;
|
||||
}
|
||||
|
||||
void e2d::Button::setNormal(Node * normal)
|
||||
{
|
||||
if (normal != _pNormal)
|
||||
if (normal != _normal)
|
||||
{
|
||||
// 移除旧的
|
||||
if (_pNormal)
|
||||
if (_normal)
|
||||
{
|
||||
this->removeChild(_pNormal);
|
||||
this->removeChild(_normal);
|
||||
}
|
||||
// 添加新的
|
||||
if (normal)
|
||||
|
|
@ -98,7 +98,7 @@ void e2d::Button::setNormal(Node * normal)
|
|||
this->addChild(normal);
|
||||
this->setSize(normal->getWidth(), normal->getHeight());
|
||||
}
|
||||
_pNormal = normal;
|
||||
_normal = normal;
|
||||
|
||||
_updateVisiable();
|
||||
}
|
||||
|
|
@ -106,73 +106,73 @@ void e2d::Button::setNormal(Node * normal)
|
|||
|
||||
void e2d::Button::setMouseOver(Node * mouseover)
|
||||
{
|
||||
if (mouseover != _pNormal)
|
||||
if (mouseover != _normal)
|
||||
{
|
||||
// 移除旧的
|
||||
if (_pMouseover)
|
||||
if (_mouseover)
|
||||
{
|
||||
this->removeChild(_pMouseover);
|
||||
this->removeChild(_mouseover);
|
||||
}
|
||||
// 添加新的
|
||||
if (mouseover)
|
||||
{
|
||||
this->addChild(mouseover);
|
||||
}
|
||||
_pMouseover = mouseover;
|
||||
_mouseover = mouseover;
|
||||
_updateVisiable();
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::Button::setSelected(Node * selected)
|
||||
{
|
||||
if (selected != _pNormal)
|
||||
if (selected != _normal)
|
||||
{
|
||||
// 移除旧的
|
||||
if (_pSelected)
|
||||
if (_selected)
|
||||
{
|
||||
this->removeChild(_pSelected);
|
||||
this->removeChild(_selected);
|
||||
}
|
||||
// 添加新的
|
||||
if (selected)
|
||||
{
|
||||
this->addChild(selected);
|
||||
}
|
||||
_pSelected = selected;
|
||||
_selected = selected;
|
||||
_updateVisiable();
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::Button::setDisabled(Node * disabled)
|
||||
{
|
||||
if (disabled != _pNormal)
|
||||
if (disabled != _normal)
|
||||
{
|
||||
// 移除旧的
|
||||
if (_pDisabled)
|
||||
if (_disabled)
|
||||
{
|
||||
this->removeChild(_pDisabled);
|
||||
this->removeChild(_disabled);
|
||||
}
|
||||
// 添加新的
|
||||
if (disabled)
|
||||
{
|
||||
this->addChild(disabled);
|
||||
}
|
||||
_pDisabled = disabled;
|
||||
_disabled = disabled;
|
||||
_updateVisiable();
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::Button::setEnable(bool enable)
|
||||
{
|
||||
if (_bEnable != enable)
|
||||
if (_enable != enable)
|
||||
{
|
||||
_bEnable = enable;
|
||||
_enable = enable;
|
||||
_updateVisiable();
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::Button::setClickFunc(const Function& func)
|
||||
{
|
||||
WARN_IF(_pNormal == nullptr, "Button cannot work without anything to show. Please set its normal displayed.");
|
||||
WARN_IF(_normal == nullptr, "Button cannot work without anything to show. Please set its normal displayed.");
|
||||
|
||||
_func = func;
|
||||
}
|
||||
|
|
@ -182,40 +182,40 @@ void e2d::Button::onFixedUpdate()
|
|||
if (SceneManager::isTransitioning())
|
||||
return;
|
||||
|
||||
if (_bEnable && _bVisiable && _pNormal)
|
||||
if (_enable && _visiable && _normal)
|
||||
{
|
||||
if (Input::isMouseLButtonRelease())
|
||||
{
|
||||
// 鼠标左键抬起时,判断鼠标坐标是否在按钮内部
|
||||
if (_bIsSelected &&
|
||||
_pNormal->isPointIn(Input::getMousePos()))
|
||||
if (_isSelected &&
|
||||
_normal->isPointIn(Input::getMousePos()))
|
||||
{
|
||||
_runCallback();
|
||||
}
|
||||
// 标记 _bIsSelected 为 false
|
||||
_bIsSelected = false;
|
||||
// 标记 _isSelected 为 false
|
||||
_isSelected = false;
|
||||
}
|
||||
|
||||
if (Input::isMouseLButtonPress())
|
||||
{
|
||||
if (_pNormal->isPointIn(Input::getMousePos()))
|
||||
if (_normal->isPointIn(Input::getMousePos()))
|
||||
{
|
||||
// 鼠标左键按下,且位于按钮内时,标记 _bIsSelected 为 true
|
||||
_bIsSelected = true;
|
||||
// 鼠标左键按下,且位于按钮内时,标记 _isSelected 为 true
|
||||
_isSelected = true;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (_bIsSelected && Input::isMouseLButtonDown())
|
||||
if (_isSelected && Input::isMouseLButtonDown())
|
||||
{
|
||||
if (_pNormal->isPointIn(Input::getMousePos()))
|
||||
if (_normal->isPointIn(Input::getMousePos()))
|
||||
{
|
||||
_setState(ButtonState::SELECTED);
|
||||
Window::setCursor(Cursor::HAND);
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (_pNormal->isPointIn(Input::getMousePos()))
|
||||
else if (_normal->isPointIn(Input::getMousePos()))
|
||||
{
|
||||
_setState(ButtonState::MOUSEOVER);
|
||||
Window::setCursor(Cursor::HAND);
|
||||
|
|
@ -225,7 +225,7 @@ void e2d::Button::onFixedUpdate()
|
|||
_setState(ButtonState::NORMAL);
|
||||
}
|
||||
|
||||
if (_bVisiable && !_bEnable && _pNormal && _pNormal->isPointIn(Input::getMousePos()))
|
||||
if (_visiable && !_enable && _normal && _normal->isPointIn(Input::getMousePos()))
|
||||
{
|
||||
Window::setCursor(Cursor::NO);
|
||||
}
|
||||
|
|
@ -233,44 +233,44 @@ void e2d::Button::onFixedUpdate()
|
|||
|
||||
void e2d::Button::_setState(ButtonState state)
|
||||
{
|
||||
if (_eBtnState != state)
|
||||
if (_state != state)
|
||||
{
|
||||
_eBtnState = state;
|
||||
_state = state;
|
||||
_updateVisiable();
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::Button::_updateVisiable()
|
||||
{
|
||||
SAFE_SET(_pNormal, setVisiable, false);
|
||||
SAFE_SET(_pMouseover, setVisiable, false);
|
||||
SAFE_SET(_pSelected, setVisiable, false);
|
||||
SAFE_SET(_pDisabled, setVisiable, false);
|
||||
SAFE_SET(_normal, setVisiable, false);
|
||||
SAFE_SET(_mouseover, setVisiable, false);
|
||||
SAFE_SET(_selected, setVisiable, false);
|
||||
SAFE_SET(_disabled, setVisiable, false);
|
||||
|
||||
if (_bEnable)
|
||||
if (_enable)
|
||||
{
|
||||
if (_eBtnState == ButtonState::SELECTED && _pSelected)
|
||||
if (_state == ButtonState::SELECTED && _selected)
|
||||
{
|
||||
_pSelected->setVisiable(true);
|
||||
_selected->setVisiable(true);
|
||||
}
|
||||
else if (_eBtnState == ButtonState::MOUSEOVER && _pMouseover)
|
||||
else if (_state == ButtonState::MOUSEOVER && _mouseover)
|
||||
{
|
||||
_pMouseover->setVisiable(true);
|
||||
_mouseover->setVisiable(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (_pNormal) _pNormal->setVisiable(true);
|
||||
if (_normal) _normal->setVisiable(true);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (_pDisabled)
|
||||
if (_disabled)
|
||||
{
|
||||
_pDisabled->setVisiable(true);
|
||||
_disabled->setVisiable(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (_pNormal) _pNormal->setVisiable(true);
|
||||
if (_normal) _normal->setVisiable(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,29 +2,21 @@
|
|||
|
||||
e2d::ButtonToggle::ButtonToggle()
|
||||
: Button()
|
||||
, _bState(true)
|
||||
, _pNormalOn(nullptr)
|
||||
, _pMouseoverOn(nullptr)
|
||||
, _pSelectedOn(nullptr)
|
||||
, _pDisabledOn(nullptr)
|
||||
, _pNormalOff(nullptr)
|
||||
, _pMouseoverOff(nullptr)
|
||||
, _pSelectedOff(nullptr)
|
||||
, _pDisabledOff(nullptr)
|
||||
, _toggle(true)
|
||||
, _normalOff(nullptr)
|
||||
, _mouseoverOff(nullptr)
|
||||
, _selectedOff(nullptr)
|
||||
, _disabledOff(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::ButtonToggle::ButtonToggle(Node * toggleOnNormal, Node * toggleOffNormal, const Function& func)
|
||||
: Button()
|
||||
, _bState(true)
|
||||
, _pNormalOn(nullptr)
|
||||
, _pMouseoverOn(nullptr)
|
||||
, _pSelectedOn(nullptr)
|
||||
, _pDisabledOn(nullptr)
|
||||
, _pNormalOff(nullptr)
|
||||
, _pMouseoverOff(nullptr)
|
||||
, _pSelectedOff(nullptr)
|
||||
, _pDisabledOff(nullptr)
|
||||
, _toggle(true)
|
||||
, _normalOff(nullptr)
|
||||
, _mouseoverOff(nullptr)
|
||||
, _selectedOff(nullptr)
|
||||
, _disabledOff(nullptr)
|
||||
{
|
||||
this->setNormal(toggleOnNormal);
|
||||
this->setNormalOff(toggleOffNormal);
|
||||
|
|
@ -33,15 +25,11 @@ e2d::ButtonToggle::ButtonToggle(Node * toggleOnNormal, Node * toggleOffNormal, c
|
|||
|
||||
e2d::ButtonToggle::ButtonToggle(Node * toggleOnNormal, Node * toggleOffNormal, Node * toggleOnSelected, Node * toggleOffSelected, const Function& func)
|
||||
: Button()
|
||||
, _bState(true)
|
||||
, _pNormalOn(nullptr)
|
||||
, _pMouseoverOn(nullptr)
|
||||
, _pSelectedOn(nullptr)
|
||||
, _pDisabledOn(nullptr)
|
||||
, _pNormalOff(nullptr)
|
||||
, _pMouseoverOff(nullptr)
|
||||
, _pSelectedOff(nullptr)
|
||||
, _pDisabledOff(nullptr)
|
||||
, _toggle(true)
|
||||
, _normalOff(nullptr)
|
||||
, _mouseoverOff(nullptr)
|
||||
, _selectedOff(nullptr)
|
||||
, _disabledOff(nullptr)
|
||||
{
|
||||
this->setNormal(toggleOnNormal);
|
||||
this->setNormalOff(toggleOffNormal);
|
||||
|
|
@ -52,15 +40,11 @@ e2d::ButtonToggle::ButtonToggle(Node * toggleOnNormal, Node * toggleOffNormal, N
|
|||
|
||||
e2d::ButtonToggle::ButtonToggle(Node * toggleOnNormal, Node * toggleOffNormal, Node * toggleOnMouseOver, Node * toggleOffMouseOver, Node * toggleOnSelected, Node * toggleOffSelected, const Function& func)
|
||||
: Button()
|
||||
, _bState(true)
|
||||
, _pNormalOn(nullptr)
|
||||
, _pMouseoverOn(nullptr)
|
||||
, _pSelectedOn(nullptr)
|
||||
, _pDisabledOn(nullptr)
|
||||
, _pNormalOff(nullptr)
|
||||
, _pMouseoverOff(nullptr)
|
||||
, _pSelectedOff(nullptr)
|
||||
, _pDisabledOff(nullptr)
|
||||
, _toggle(true)
|
||||
, _normalOff(nullptr)
|
||||
, _mouseoverOff(nullptr)
|
||||
, _selectedOff(nullptr)
|
||||
, _disabledOff(nullptr)
|
||||
{
|
||||
this->setNormal(toggleOnNormal);
|
||||
this->setNormalOff(toggleOffNormal);
|
||||
|
|
@ -73,15 +57,11 @@ e2d::ButtonToggle::ButtonToggle(Node * toggleOnNormal, Node * toggleOffNormal, N
|
|||
|
||||
e2d::ButtonToggle::ButtonToggle(Node * toggleOnNormal, Node * toggleOffNormal, Node * toggleOnMouseOver, Node * toggleOffMouseOver, Node * toggleOnSelected, Node * toggleOffSelected, Node * toggleOnDisabled, Node * toggleOffDisabled, const Function& func)
|
||||
: Button()
|
||||
, _bState(true)
|
||||
, _pNormalOn(nullptr)
|
||||
, _pMouseoverOn(nullptr)
|
||||
, _pSelectedOn(nullptr)
|
||||
, _pDisabledOn(nullptr)
|
||||
, _pNormalOff(nullptr)
|
||||
, _pMouseoverOff(nullptr)
|
||||
, _pSelectedOff(nullptr)
|
||||
, _pDisabledOff(nullptr)
|
||||
, _toggle(true)
|
||||
, _normalOff(nullptr)
|
||||
, _mouseoverOff(nullptr)
|
||||
, _selectedOff(nullptr)
|
||||
, _disabledOff(nullptr)
|
||||
{
|
||||
this->setNormal(toggleOnNormal);
|
||||
this->setNormalOff(toggleOffNormal);
|
||||
|
|
@ -96,14 +76,14 @@ e2d::ButtonToggle::ButtonToggle(Node * toggleOnNormal, Node * toggleOffNormal, N
|
|||
|
||||
bool e2d::ButtonToggle::getState() const
|
||||
{
|
||||
return _bState;
|
||||
return _toggle;
|
||||
}
|
||||
|
||||
void e2d::ButtonToggle::setState(bool bState)
|
||||
{
|
||||
if (_bState != bState)
|
||||
if (_toggle != bState)
|
||||
{
|
||||
_bState = bState;
|
||||
_toggle = bState;
|
||||
_updateState();
|
||||
_updateVisiable();
|
||||
}
|
||||
|
|
@ -111,12 +91,12 @@ void e2d::ButtonToggle::setState(bool bState)
|
|||
|
||||
void e2d::ButtonToggle::setNormal(Node * normal)
|
||||
{
|
||||
if (normal != _pNormalOn)
|
||||
if (normal != _normal)
|
||||
{
|
||||
// 移除旧的
|
||||
if (_pNormalOn)
|
||||
if (_normal)
|
||||
{
|
||||
this->removeChild(_pNormalOn);
|
||||
this->removeChild(_normal);
|
||||
}
|
||||
// 添加新的
|
||||
if (normal)
|
||||
|
|
@ -124,7 +104,7 @@ void e2d::ButtonToggle::setNormal(Node * normal)
|
|||
this->addChild(normal);
|
||||
this->setSize(normal->getWidth(), normal->getHeight());
|
||||
}
|
||||
_pNormalOn = normal;
|
||||
_normal = normal;
|
||||
|
||||
_updateState();
|
||||
_updateVisiable();
|
||||
|
|
@ -133,19 +113,19 @@ void e2d::ButtonToggle::setNormal(Node * normal)
|
|||
|
||||
void e2d::ButtonToggle::setMouseOver(Node * mouseover)
|
||||
{
|
||||
if (mouseover != _pMouseoverOn)
|
||||
if (mouseover != _mouseover)
|
||||
{
|
||||
// 移除旧的
|
||||
if (_pMouseoverOn)
|
||||
if (_mouseover)
|
||||
{
|
||||
this->removeChild(_pMouseoverOn);
|
||||
this->removeChild(_mouseover);
|
||||
}
|
||||
// 添加新的
|
||||
if (mouseover)
|
||||
{
|
||||
this->addChild(mouseover);
|
||||
}
|
||||
_pMouseoverOn = mouseover;
|
||||
_mouseover = mouseover;
|
||||
|
||||
_updateState();
|
||||
_updateVisiable();
|
||||
|
|
@ -154,19 +134,19 @@ void e2d::ButtonToggle::setMouseOver(Node * mouseover)
|
|||
|
||||
void e2d::ButtonToggle::setSelected(Node * selected)
|
||||
{
|
||||
if (selected != _pSelectedOn)
|
||||
if (selected != _selected)
|
||||
{
|
||||
// 移除旧的
|
||||
if (_pSelectedOn)
|
||||
if (_selected)
|
||||
{
|
||||
this->removeChild(_pSelectedOn);
|
||||
this->removeChild(_selected);
|
||||
}
|
||||
// 添加新的
|
||||
if (selected)
|
||||
{
|
||||
this->addChild(selected);
|
||||
}
|
||||
_pSelectedOn = selected;
|
||||
_selected = selected;
|
||||
|
||||
_updateState();
|
||||
_updateVisiable();
|
||||
|
|
@ -175,19 +155,19 @@ void e2d::ButtonToggle::setSelected(Node * selected)
|
|||
|
||||
void e2d::ButtonToggle::setDisabled(Node * disabled)
|
||||
{
|
||||
if (disabled != _pDisabledOn)
|
||||
if (disabled != _disabled)
|
||||
{
|
||||
// 移除旧的
|
||||
if (_pDisabledOn)
|
||||
if (_disabled)
|
||||
{
|
||||
this->removeChild(_pDisabledOn);
|
||||
this->removeChild(_disabled);
|
||||
}
|
||||
// 添加新的
|
||||
if (disabled)
|
||||
{
|
||||
this->addChild(disabled);
|
||||
}
|
||||
_pDisabledOn = disabled;
|
||||
_disabled = disabled;
|
||||
|
||||
_updateState();
|
||||
_updateVisiable();
|
||||
|
|
@ -196,19 +176,19 @@ void e2d::ButtonToggle::setDisabled(Node * disabled)
|
|||
|
||||
void e2d::ButtonToggle::setNormalOff(Node * normal)
|
||||
{
|
||||
if (normal != _pNormalOff)
|
||||
if (normal != _normalOff)
|
||||
{
|
||||
// 移除旧的
|
||||
if (_pNormalOff)
|
||||
if (_normalOff)
|
||||
{
|
||||
this->removeChild(_pNormalOff);
|
||||
this->removeChild(_normalOff);
|
||||
}
|
||||
// 添加新的
|
||||
if (normal)
|
||||
{
|
||||
this->addChild(normal);
|
||||
}
|
||||
_pNormalOff = normal;
|
||||
_normalOff = normal;
|
||||
|
||||
_updateState();
|
||||
_updateVisiable();
|
||||
|
|
@ -217,19 +197,19 @@ void e2d::ButtonToggle::setNormalOff(Node * normal)
|
|||
|
||||
void e2d::ButtonToggle::setMouseOverOff(Node * mouseover)
|
||||
{
|
||||
if (mouseover != _pMouseoverOff)
|
||||
if (mouseover != _mouseoverOff)
|
||||
{
|
||||
// 移除旧的
|
||||
if (_pMouseoverOff)
|
||||
if (_mouseoverOff)
|
||||
{
|
||||
this->removeChild(_pMouseoverOff);
|
||||
this->removeChild(_mouseoverOff);
|
||||
}
|
||||
// 添加新的
|
||||
if (mouseover)
|
||||
{
|
||||
this->addChild(mouseover);
|
||||
}
|
||||
_pMouseoverOff = mouseover;
|
||||
_mouseoverOff = mouseover;
|
||||
|
||||
_updateState();
|
||||
_updateVisiable();
|
||||
|
|
@ -238,19 +218,19 @@ void e2d::ButtonToggle::setMouseOverOff(Node * mouseover)
|
|||
|
||||
void e2d::ButtonToggle::setSelectedOff(Node * selected)
|
||||
{
|
||||
if (selected != _pSelectedOff)
|
||||
if (selected != _selectedOff)
|
||||
{
|
||||
// 移除旧的
|
||||
if (_pSelectedOff)
|
||||
if (_selectedOff)
|
||||
{
|
||||
this->removeChild(_pSelectedOff);
|
||||
this->removeChild(_selectedOff);
|
||||
}
|
||||
// 添加新的
|
||||
if (selected)
|
||||
{
|
||||
this->addChild(selected);
|
||||
}
|
||||
_pSelectedOff = selected;
|
||||
_selectedOff = selected;
|
||||
|
||||
_updateState();
|
||||
_updateVisiable();
|
||||
|
|
@ -259,19 +239,19 @@ void e2d::ButtonToggle::setSelectedOff(Node * selected)
|
|||
|
||||
void e2d::ButtonToggle::setDisabledOff(Node * disabled)
|
||||
{
|
||||
if (disabled != _pDisabledOff)
|
||||
if (disabled != _disabledOff)
|
||||
{
|
||||
// 移除旧的
|
||||
if (_pDisabledOff)
|
||||
if (_disabledOff)
|
||||
{
|
||||
this->removeChild(_pDisabledOff);
|
||||
this->removeChild(_disabledOff);
|
||||
}
|
||||
// 添加新的
|
||||
if (disabled)
|
||||
{
|
||||
this->addChild(disabled);
|
||||
}
|
||||
_pDisabledOff = disabled;
|
||||
_disabledOff = disabled;
|
||||
|
||||
_updateState();
|
||||
_updateVisiable();
|
||||
|
|
@ -280,35 +260,35 @@ void e2d::ButtonToggle::setDisabledOff(Node * disabled)
|
|||
|
||||
void e2d::ButtonToggle::_updateState()
|
||||
{
|
||||
if (_bState)
|
||||
if (_toggle)
|
||||
{
|
||||
_pNormal = _pNormalOn;
|
||||
_pMouseover = _pMouseoverOn;
|
||||
_pSelected = _pSelectedOn;
|
||||
_pDisabled = _pDisabledOn;
|
||||
_normal = _normal;
|
||||
_mouseover = _mouseover;
|
||||
_selected = _selected;
|
||||
_disabled = _disabled;
|
||||
|
||||
if (_pNormalOff) _pNormalOff->setVisiable(false);
|
||||
if (_pMouseoverOff) _pMouseoverOff->setVisiable(false);
|
||||
if (_pSelectedOff) _pSelectedOff->setVisiable(false);
|
||||
if (_pDisabledOff) _pDisabledOff->setVisiable(false);
|
||||
if (_normalOff) _normalOff->setVisiable(false);
|
||||
if (_mouseoverOff) _mouseoverOff->setVisiable(false);
|
||||
if (_selectedOff) _selectedOff->setVisiable(false);
|
||||
if (_disabledOff) _disabledOff->setVisiable(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
_pNormal = _pNormalOff;
|
||||
_pMouseover = _pMouseoverOff;
|
||||
_pSelected = _pSelectedOff;
|
||||
_pDisabled = _pDisabledOff;
|
||||
_normal = _normalOff;
|
||||
_mouseover = _mouseoverOff;
|
||||
_selected = _selectedOff;
|
||||
_disabled = _disabledOff;
|
||||
|
||||
if (_pNormalOn) _pNormalOn->setVisiable(false);
|
||||
if (_pMouseoverOn) _pMouseoverOn->setVisiable(false);
|
||||
if (_pSelectedOn) _pSelectedOn->setVisiable(false);
|
||||
if (_pDisabledOn) _pDisabledOn->setVisiable(false);
|
||||
if (_normal) _normal->setVisiable(false);
|
||||
if (_mouseover) _mouseover->setVisiable(false);
|
||||
if (_selected) _selected->setVisiable(false);
|
||||
if (_disabled) _disabled->setVisiable(false);
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::ButtonToggle::_runCallback()
|
||||
{
|
||||
_bState = !_bState;
|
||||
_toggle = !_toggle;
|
||||
_updateState();
|
||||
|
||||
if (_func)
|
||||
|
|
|
|||
|
|
@ -1,13 +1,13 @@
|
|||
#include "..\e2dnode.h"
|
||||
|
||||
e2d::Menu::Menu()
|
||||
: _bEnable(true)
|
||||
: _enable(true)
|
||||
{
|
||||
}
|
||||
|
||||
#ifdef HIGHER_THAN_VS2012
|
||||
e2d::Menu::Menu(const std::initializer_list<Button*>& vButtons)
|
||||
: _bEnable(true)
|
||||
: _enable(true)
|
||||
{
|
||||
for (auto button : vButtons)
|
||||
{
|
||||
|
|
@ -18,7 +18,7 @@ e2d::Menu::Menu(const std::initializer_list<Button*>& vButtons)
|
|||
#else
|
||||
|
||||
e2d::Menu::Menu(int number, Button * button1, ...)
|
||||
: _bEnable(true)
|
||||
: _enable(true)
|
||||
{
|
||||
Button ** ppButton = &button1;
|
||||
|
||||
|
|
@ -33,21 +33,21 @@ e2d::Menu::Menu(int number, Button * button1, ...)
|
|||
|
||||
bool e2d::Menu::isEnable() const
|
||||
{
|
||||
return _bEnable;
|
||||
return _enable;
|
||||
}
|
||||
|
||||
size_t e2d::Menu::getButtonCount() const
|
||||
{
|
||||
return _vButtons.size();
|
||||
return _buttons.size();
|
||||
}
|
||||
|
||||
void e2d::Menu::setEnable(bool enable)
|
||||
{
|
||||
if (_bEnable != enable)
|
||||
if (_enable != enable)
|
||||
{
|
||||
_bEnable = enable;
|
||||
_enable = enable;
|
||||
|
||||
for (auto button : _vButtons)
|
||||
for (auto button : _buttons)
|
||||
{
|
||||
button->setEnable(enable);
|
||||
}
|
||||
|
|
@ -59,14 +59,14 @@ void e2d::Menu::addButton(Button * button)
|
|||
if (button)
|
||||
{
|
||||
this->addChild(button);
|
||||
_vButtons.push_back(button);
|
||||
button->setEnable(_bEnable);
|
||||
_buttons.push_back(button);
|
||||
button->setEnable(_enable);
|
||||
}
|
||||
}
|
||||
|
||||
bool e2d::Menu::removeButton(Button * button)
|
||||
{
|
||||
if (_vButtons.empty())
|
||||
if (_buttons.empty())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
|
@ -75,14 +75,14 @@ bool e2d::Menu::removeButton(Button * button)
|
|||
|
||||
if (button)
|
||||
{
|
||||
size_t size = _vButtons.size();
|
||||
size_t size = _buttons.size();
|
||||
for (size_t i = 0; i < size; i++)
|
||||
{
|
||||
if (_vButtons[i] == button)
|
||||
if (_buttons[i] == button)
|
||||
{
|
||||
// ÒÆ³ý°´Å¥Ç°£¬½«ËüÆôÓÃ
|
||||
button->setEnable(true);
|
||||
_vButtons.erase(_vButtons.begin() + i);
|
||||
_buttons.erase(_buttons.begin() + i);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,30 +11,30 @@ static bool s_fDefaultColliderEnabled = true;
|
|||
|
||||
e2d::Node::Node()
|
||||
: _nOrder(0)
|
||||
, _fPosX(0)
|
||||
, _fPosY(0)
|
||||
, _fWidth(0)
|
||||
, _fHeight(0)
|
||||
, _fScaleX(1.0f)
|
||||
, _fScaleY(1.0f)
|
||||
, _fRotation(0)
|
||||
, _fSkewAngleX(0)
|
||||
, _fSkewAngleY(0)
|
||||
, _fDisplayOpacity(1.0f)
|
||||
, _fRealOpacity(1.0f)
|
||||
, _fPivotX(s_fDefaultPiovtX)
|
||||
, _fPivotY(s_fDefaultPiovtY)
|
||||
, _MatriInitial(D2D1::Matrix3x2F::Identity())
|
||||
, _MatriFinal(D2D1::Matrix3x2F::Identity())
|
||||
, _bVisiable(true)
|
||||
, _pCollider(nullptr)
|
||||
, _pParent(nullptr)
|
||||
, _pParentScene(nullptr)
|
||||
, _nHashName(0)
|
||||
, _bSortChildrenNeeded(false)
|
||||
, _bTransformNeeded(false)
|
||||
, _bAutoUpdate(true)
|
||||
, _bPositionFixed(false)
|
||||
, _posX(0)
|
||||
, _posY(0)
|
||||
, _width(0)
|
||||
, _height(0)
|
||||
, _scaleX(1.0f)
|
||||
, _scaleY(1.0f)
|
||||
, _rotation(0)
|
||||
, _skewAngleX(0)
|
||||
, _skewAngleY(0)
|
||||
, _displayOpacity(1.0f)
|
||||
, _realOpacity(1.0f)
|
||||
, _pivotX(s_fDefaultPiovtX)
|
||||
, _pivotY(s_fDefaultPiovtY)
|
||||
, _initialMatri(D2D1::Matrix3x2F::Identity())
|
||||
, _finalMatri(D2D1::Matrix3x2F::Identity())
|
||||
, _visiable(true)
|
||||
, _collider(nullptr)
|
||||
, _parent(nullptr)
|
||||
, _parentScene(nullptr)
|
||||
, _hashName(0)
|
||||
, _needSort(false)
|
||||
, _needTransform(false)
|
||||
, _autoUpdate(true)
|
||||
, _positionFixed(false)
|
||||
{
|
||||
if (s_fDefaultColliderEnabled)
|
||||
{
|
||||
|
|
@ -49,14 +49,14 @@ e2d::Node::~Node()
|
|||
|
||||
void e2d::Node::_update()
|
||||
{
|
||||
if (_bTransformNeeded)
|
||||
if (_needTransform)
|
||||
{
|
||||
_updateTransform();
|
||||
}
|
||||
|
||||
if (!_vChildren.empty())
|
||||
if (!_children.empty())
|
||||
{
|
||||
if (_bSortChildrenNeeded)
|
||||
if (_needSort)
|
||||
{
|
||||
// 子节点排序
|
||||
auto sortFunc = [](Node * n1, Node * n2) {
|
||||
|
|
@ -64,20 +64,20 @@ void e2d::Node::_update()
|
|||
};
|
||||
|
||||
std::sort(
|
||||
std::begin(_vChildren),
|
||||
std::end(_vChildren),
|
||||
std::begin(_children),
|
||||
std::end(_children),
|
||||
sortFunc
|
||||
);
|
||||
|
||||
_bSortChildrenNeeded = false;
|
||||
_needSort = false;
|
||||
}
|
||||
|
||||
// 遍历子节点
|
||||
size_t size = _vChildren.size();
|
||||
size_t size = _children.size();
|
||||
size_t i;
|
||||
for (i = 0; i < size; i++)
|
||||
{
|
||||
auto child = _vChildren[i];
|
||||
auto child = _children[i];
|
||||
// 访问 Order 小于零的节点
|
||||
if (child->getOrder() < 0)
|
||||
{
|
||||
|
|
@ -89,7 +89,7 @@ void e2d::Node::_update()
|
|||
}
|
||||
}
|
||||
|
||||
if (_bAutoUpdate)
|
||||
if (_autoUpdate)
|
||||
{
|
||||
if (!Game::isPaused())
|
||||
{
|
||||
|
|
@ -100,11 +100,11 @@ void e2d::Node::_update()
|
|||
|
||||
// 访问剩余节点
|
||||
for (; i < size; i++)
|
||||
_vChildren[i]->_update();
|
||||
_children[i]->_update();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (_bAutoUpdate)
|
||||
if (_autoUpdate)
|
||||
{
|
||||
if (!Game::isPaused())
|
||||
{
|
||||
|
|
@ -117,18 +117,18 @@ void e2d::Node::_update()
|
|||
|
||||
void e2d::Node::_render()
|
||||
{
|
||||
if (!_bVisiable)
|
||||
if (!_visiable)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!_vChildren.empty())
|
||||
if (!_children.empty())
|
||||
{
|
||||
size_t size = _vChildren.size();
|
||||
size_t size = _children.size();
|
||||
size_t i;
|
||||
for (i = 0; i < size; i++)
|
||||
{
|
||||
auto child = _vChildren[i];
|
||||
auto child = _children[i];
|
||||
// 访问 Order 小于零的节点
|
||||
if (child->getOrder() < 0)
|
||||
{
|
||||
|
|
@ -141,18 +141,18 @@ void e2d::Node::_render()
|
|||
}
|
||||
|
||||
// 转换渲染器的二维矩阵
|
||||
Renderer::getRenderTarget()->SetTransform(_MatriFinal);
|
||||
Renderer::getRenderTarget()->SetTransform(_finalMatri);
|
||||
// 渲染自身
|
||||
this->onRender();
|
||||
|
||||
// 访问剩余节点
|
||||
for (; i < size; i++)
|
||||
_vChildren[i]->_render();
|
||||
_children[i]->_render();
|
||||
}
|
||||
else
|
||||
{
|
||||
// 转换渲染器的二维矩阵
|
||||
Renderer::getRenderTarget()->SetTransform(_MatriFinal);
|
||||
Renderer::getRenderTarget()->SetTransform(_finalMatri);
|
||||
// 渲染自身
|
||||
this->onRender();
|
||||
}
|
||||
|
|
@ -161,13 +161,13 @@ void e2d::Node::_render()
|
|||
void e2d::Node::_drawCollider()
|
||||
{
|
||||
// 绘制自身的几何碰撞体
|
||||
if (_pCollider && _pCollider->_bIsVisiable)
|
||||
if (_collider && _collider->_visiable)
|
||||
{
|
||||
_pCollider->_render();
|
||||
_collider->_render();
|
||||
}
|
||||
|
||||
// 绘制所有子节点的几何碰撞体
|
||||
for (auto child : _vChildren)
|
||||
for (auto child : _children)
|
||||
{
|
||||
child->_drawCollider();
|
||||
}
|
||||
|
|
@ -176,30 +176,30 @@ void e2d::Node::_drawCollider()
|
|||
void e2d::Node::_updateSelfTransform()
|
||||
{
|
||||
// 计算中心点坐标
|
||||
D2D1_POINT_2F pivot = { _fWidth * _fPivotX, _fHeight * _fPivotY };
|
||||
D2D1_POINT_2F pivot = { _width * _pivotX, _height * _pivotY };
|
||||
// 变换 Initial 矩阵,子节点将根据这个矩阵进行变换
|
||||
_MatriInitial = D2D1::Matrix3x2F::Scale(
|
||||
_fScaleX,
|
||||
_fScaleY,
|
||||
_initialMatri = D2D1::Matrix3x2F::Scale(
|
||||
_scaleX,
|
||||
_scaleY,
|
||||
pivot
|
||||
) * D2D1::Matrix3x2F::Skew(
|
||||
_fSkewAngleX,
|
||||
_fSkewAngleY,
|
||||
_skewAngleX,
|
||||
_skewAngleY,
|
||||
pivot
|
||||
) * D2D1::Matrix3x2F::Rotation(
|
||||
_fRotation,
|
||||
_rotation,
|
||||
pivot
|
||||
) * D2D1::Matrix3x2F::Translation(
|
||||
_fPosX,
|
||||
_fPosY
|
||||
_posX,
|
||||
_posY
|
||||
);
|
||||
// 根据自身中心点变换 Final 矩阵
|
||||
_MatriFinal = _MatriInitial * D2D1::Matrix3x2F::Translation(-pivot.x, -pivot.y);
|
||||
_finalMatri = _initialMatri * D2D1::Matrix3x2F::Translation(-pivot.x, -pivot.y);
|
||||
// 和父节点矩阵相乘
|
||||
if (!_bPositionFixed && _pParent)
|
||||
if (!_positionFixed && _parent)
|
||||
{
|
||||
_MatriInitial = _MatriInitial * _pParent->_MatriInitial;
|
||||
_MatriFinal = _MatriFinal * _pParent->_MatriInitial;
|
||||
_initialMatri = _initialMatri * _parent->_initialMatri;
|
||||
_finalMatri = _finalMatri * _parent->_initialMatri;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -208,14 +208,14 @@ void e2d::Node::_updateTransform()
|
|||
// 计算自身的转换矩阵
|
||||
_updateSelfTransform();
|
||||
// 绑定于自身的碰撞体也进行相应转换
|
||||
if (_pCollider)
|
||||
if (_collider)
|
||||
{
|
||||
_pCollider->_transform();
|
||||
_collider->_transform();
|
||||
}
|
||||
// 标志已执行过变换
|
||||
_bTransformNeeded = false;
|
||||
_needTransform = false;
|
||||
// 遍历子节点下的所有节点
|
||||
for (auto child : this->_vChildren)
|
||||
for (auto child : this->_children)
|
||||
{
|
||||
child->_updateTransform();
|
||||
}
|
||||
|
|
@ -223,11 +223,11 @@ void e2d::Node::_updateTransform()
|
|||
|
||||
void e2d::Node::_updateOpacity()
|
||||
{
|
||||
if (_pParent)
|
||||
if (_parent)
|
||||
{
|
||||
_fDisplayOpacity = _fRealOpacity * _pParent->_fDisplayOpacity;
|
||||
_displayOpacity = _realOpacity * _parent->_displayOpacity;
|
||||
}
|
||||
for (auto child : _vChildren)
|
||||
for (auto child : _children)
|
||||
{
|
||||
child->_updateOpacity();
|
||||
}
|
||||
|
|
@ -235,7 +235,7 @@ void e2d::Node::_updateOpacity()
|
|||
|
||||
bool e2d::Node::isVisiable() const
|
||||
{
|
||||
return _bVisiable;
|
||||
return _visiable;
|
||||
}
|
||||
|
||||
e2d::String e2d::Node::getName() const
|
||||
|
|
@ -245,57 +245,57 @@ e2d::String e2d::Node::getName() const
|
|||
|
||||
unsigned int e2d::Node::getHashName() const
|
||||
{
|
||||
return _nHashName;
|
||||
return _hashName;
|
||||
}
|
||||
|
||||
double e2d::Node::getPosX() const
|
||||
{
|
||||
return _fPosX;
|
||||
return _posX;
|
||||
}
|
||||
|
||||
double e2d::Node::getPosY() const
|
||||
{
|
||||
return _fPosY;
|
||||
return _posY;
|
||||
}
|
||||
|
||||
e2d::Point e2d::Node::getPos() const
|
||||
{
|
||||
return Point(_fPosX, _fPosY);
|
||||
return Point(_posX, _posY);
|
||||
}
|
||||
|
||||
double e2d::Node::getWidth() const
|
||||
{
|
||||
return _fWidth * _fScaleX;
|
||||
return _width * _scaleX;
|
||||
}
|
||||
|
||||
double e2d::Node::getHeight() const
|
||||
{
|
||||
return _fHeight * _fScaleY;
|
||||
return _height * _scaleY;
|
||||
}
|
||||
|
||||
double e2d::Node::getRealWidth() const
|
||||
{
|
||||
return _fWidth;
|
||||
return _width;
|
||||
}
|
||||
|
||||
double e2d::Node::getRealHeight() const
|
||||
{
|
||||
return _fHeight;
|
||||
return _height;
|
||||
}
|
||||
|
||||
e2d::Size e2d::Node::getRealSize() const
|
||||
{
|
||||
return Size(_fWidth, _fHeight);
|
||||
return Size(_width, _height);
|
||||
}
|
||||
|
||||
double e2d::Node::getPivotX() const
|
||||
{
|
||||
return _fPivotX;
|
||||
return _pivotX;
|
||||
}
|
||||
|
||||
double e2d::Node::getPivotY() const
|
||||
{
|
||||
return _fPivotY;
|
||||
return _pivotY;
|
||||
}
|
||||
|
||||
e2d::Size e2d::Node::getSize() const
|
||||
|
|
@ -305,56 +305,56 @@ e2d::Size e2d::Node::getSize() const
|
|||
|
||||
double e2d::Node::getScaleX() const
|
||||
{
|
||||
return _fScaleX;
|
||||
return _scaleX;
|
||||
}
|
||||
|
||||
double e2d::Node::getScaleY() const
|
||||
{
|
||||
return _fScaleY;
|
||||
return _scaleY;
|
||||
}
|
||||
|
||||
double e2d::Node::getSkewX() const
|
||||
{
|
||||
return _fSkewAngleX;
|
||||
return _skewAngleX;
|
||||
}
|
||||
|
||||
double e2d::Node::getSkewY() const
|
||||
{
|
||||
return _fSkewAngleY;
|
||||
return _skewAngleY;
|
||||
}
|
||||
|
||||
double e2d::Node::getRotation() const
|
||||
{
|
||||
return _fRotation;
|
||||
return _rotation;
|
||||
}
|
||||
|
||||
double e2d::Node::getOpacity() const
|
||||
{
|
||||
return _fRealOpacity;
|
||||
return _realOpacity;
|
||||
}
|
||||
|
||||
e2d::NodeProperty e2d::Node::getProperty() const
|
||||
{
|
||||
NodeProperty prop;
|
||||
prop.visable = _bVisiable;
|
||||
prop.posX = _fPosX;
|
||||
prop.posY = _fPosY;
|
||||
prop.width = _fWidth;
|
||||
prop.height = _fHeight;
|
||||
prop.opacity = _fRealOpacity;
|
||||
prop.pivotX = _fPivotX;
|
||||
prop.pivotY = _fPivotY;
|
||||
prop.scaleX = _fScaleX;
|
||||
prop.scaleY = _fScaleY;
|
||||
prop.rotation = _fRotation;
|
||||
prop.skewAngleX = _fSkewAngleX;
|
||||
prop.skewAngleY = _fSkewAngleY;
|
||||
prop.visable = _visiable;
|
||||
prop.posX = _posX;
|
||||
prop.posY = _posY;
|
||||
prop.width = _width;
|
||||
prop.height = _height;
|
||||
prop.opacity = _realOpacity;
|
||||
prop.pivotX = _pivotX;
|
||||
prop.pivotY = _pivotY;
|
||||
prop.scaleX = _scaleX;
|
||||
prop.scaleY = _scaleY;
|
||||
prop.rotation = _rotation;
|
||||
prop.skewAngleX = _skewAngleX;
|
||||
prop.skewAngleY = _skewAngleY;
|
||||
return prop;
|
||||
}
|
||||
|
||||
e2d::Collider * e2d::Node::getCollider() const
|
||||
{
|
||||
return _pCollider;
|
||||
return _collider;
|
||||
}
|
||||
|
||||
int e2d::Node::getOrder() const
|
||||
|
|
@ -369,12 +369,12 @@ void e2d::Node::setOrder(int order)
|
|||
|
||||
void e2d::Node::setPosX(double x)
|
||||
{
|
||||
this->setPos(x, _fPosY);
|
||||
this->setPos(x, _posY);
|
||||
}
|
||||
|
||||
void e2d::Node::setPosY(double y)
|
||||
{
|
||||
this->setPos(_fPosX, y);
|
||||
this->setPos(_posX, y);
|
||||
}
|
||||
|
||||
void e2d::Node::setPos(const Point & p)
|
||||
|
|
@ -384,21 +384,21 @@ void e2d::Node::setPos(const Point & p)
|
|||
|
||||
void e2d::Node::setPos(double x, double y)
|
||||
{
|
||||
if (_fPosX == x && _fPosY == y)
|
||||
if (_posX == x && _posY == y)
|
||||
return;
|
||||
|
||||
_fPosX = static_cast<float>(x);
|
||||
_fPosY = static_cast<float>(y);
|
||||
_bTransformNeeded = true;
|
||||
_posX = float(x);
|
||||
_posY = float(y);
|
||||
_needTransform = true;
|
||||
}
|
||||
|
||||
void e2d::Node::setPosFixed(bool fixed)
|
||||
{
|
||||
if (_bPositionFixed == fixed)
|
||||
if (_positionFixed == fixed)
|
||||
return;
|
||||
|
||||
_bPositionFixed = fixed;
|
||||
_bTransformNeeded = true;
|
||||
_positionFixed = fixed;
|
||||
_needTransform = true;
|
||||
}
|
||||
|
||||
void e2d::Node::movePosX(double x)
|
||||
|
|
@ -413,7 +413,7 @@ void e2d::Node::movePosY(double y)
|
|||
|
||||
void e2d::Node::movePos(double x, double y)
|
||||
{
|
||||
this->setPos(_fPosX + x, _fPosY + y);
|
||||
this->setPos(_posX + x, _posY + y);
|
||||
}
|
||||
|
||||
void e2d::Node::movePos(const Vector & v)
|
||||
|
|
@ -423,12 +423,12 @@ void e2d::Node::movePos(const Vector & v)
|
|||
|
||||
void e2d::Node::setScaleX(double scaleX)
|
||||
{
|
||||
this->setScale(scaleX, _fScaleY);
|
||||
this->setScale(scaleX, _scaleY);
|
||||
}
|
||||
|
||||
void e2d::Node::setScaleY(double scaleY)
|
||||
{
|
||||
this->setScale(_fScaleX, scaleY);
|
||||
this->setScale(_scaleX, scaleY);
|
||||
}
|
||||
|
||||
void e2d::Node::setScale(double scale)
|
||||
|
|
@ -438,91 +438,91 @@ void e2d::Node::setScale(double scale)
|
|||
|
||||
void e2d::Node::setScale(double scaleX, double scaleY)
|
||||
{
|
||||
if (_fScaleX == scaleX && _fScaleY == scaleY)
|
||||
if (_scaleX == scaleX && _scaleY == scaleY)
|
||||
return;
|
||||
|
||||
_fScaleX = static_cast<float>(scaleX);
|
||||
_fScaleY = static_cast<float>(scaleY);
|
||||
_bTransformNeeded = true;
|
||||
_scaleX = float(scaleX);
|
||||
_scaleY = float(scaleY);
|
||||
_needTransform = true;
|
||||
}
|
||||
|
||||
void e2d::Node::setSkewX(double angleX)
|
||||
{
|
||||
this->setSkew(angleX, _fSkewAngleY);
|
||||
this->setSkew(angleX, _skewAngleY);
|
||||
}
|
||||
|
||||
void e2d::Node::setSkewY(double angleY)
|
||||
{
|
||||
this->setSkew(_fSkewAngleX, angleY);
|
||||
this->setSkew(_skewAngleX, angleY);
|
||||
}
|
||||
|
||||
void e2d::Node::setSkew(double angleX, double angleY)
|
||||
{
|
||||
if (_fSkewAngleX == angleX && _fSkewAngleY == angleY)
|
||||
if (_skewAngleX == angleX && _skewAngleY == angleY)
|
||||
return;
|
||||
|
||||
_fSkewAngleX = static_cast<float>(angleX);
|
||||
_fSkewAngleY = static_cast<float>(angleY);
|
||||
_bTransformNeeded = true;
|
||||
_skewAngleX = float(angleX);
|
||||
_skewAngleY = float(angleY);
|
||||
_needTransform = true;
|
||||
}
|
||||
|
||||
void e2d::Node::setRotation(double angle)
|
||||
{
|
||||
if (_fRotation == angle)
|
||||
if (_rotation == angle)
|
||||
return;
|
||||
|
||||
_fRotation = static_cast<float>(angle);
|
||||
_bTransformNeeded = true;
|
||||
_rotation = float(angle);
|
||||
_needTransform = true;
|
||||
}
|
||||
|
||||
void e2d::Node::setOpacity(double opacity)
|
||||
{
|
||||
if (_fRealOpacity == opacity)
|
||||
if (_realOpacity == opacity)
|
||||
return;
|
||||
|
||||
_fDisplayOpacity = _fRealOpacity = min(max(static_cast<float>(opacity), 0), 1);
|
||||
_displayOpacity = _realOpacity = min(max(float(opacity), 0), 1);
|
||||
// 更新节点透明度
|
||||
_updateOpacity();
|
||||
}
|
||||
|
||||
void e2d::Node::setPivotX(double pivotX)
|
||||
{
|
||||
this->setPivot(pivotX, _fPivotY);
|
||||
this->setPivot(pivotX, _pivotY);
|
||||
}
|
||||
|
||||
void e2d::Node::setPivotY(double pivotY)
|
||||
{
|
||||
this->setPivot(_fPivotX, pivotY);
|
||||
this->setPivot(_pivotX, pivotY);
|
||||
}
|
||||
|
||||
void e2d::Node::setPivot(double pivotX, double pivotY)
|
||||
{
|
||||
if (_fPivotX == pivotX && _fPivotY == pivotY)
|
||||
if (_pivotX == pivotX && _pivotY == pivotY)
|
||||
return;
|
||||
|
||||
_fPivotX = min(max(static_cast<float>(pivotX), 0), 1);
|
||||
_fPivotY = min(max(static_cast<float>(pivotY), 0), 1);
|
||||
_bTransformNeeded = true;
|
||||
_pivotX = min(max(float(pivotX), 0), 1);
|
||||
_pivotY = min(max(float(pivotY), 0), 1);
|
||||
_needTransform = true;
|
||||
}
|
||||
|
||||
void e2d::Node::setWidth(double width)
|
||||
{
|
||||
this->setSize(width, _fHeight);
|
||||
this->setSize(width, _height);
|
||||
}
|
||||
|
||||
void e2d::Node::setHeight(double height)
|
||||
{
|
||||
this->setSize(_fWidth, height);
|
||||
this->setSize(_width, height);
|
||||
}
|
||||
|
||||
void e2d::Node::setSize(double width, double height)
|
||||
{
|
||||
if (_fWidth == width && _fHeight == height)
|
||||
if (_width == width && _height == height)
|
||||
return;
|
||||
|
||||
_fWidth = static_cast<float>(width);
|
||||
_fHeight = static_cast<float>(height);
|
||||
_bTransformNeeded = true;
|
||||
_width = float(width);
|
||||
_height = float(height);
|
||||
_needTransform = true;
|
||||
}
|
||||
|
||||
void e2d::Node::setSize(Size size)
|
||||
|
|
@ -575,26 +575,26 @@ void e2d::Node::setCollider(ColliderType nColliderType)
|
|||
void e2d::Node::setCollider(Collider * pCollider)
|
||||
{
|
||||
// 删除旧的碰撞体
|
||||
ColliderManager::__removeCollider(_pCollider);
|
||||
ColliderManager::__removeCollider(_collider);
|
||||
// 添加新的碰撞体
|
||||
ColliderManager::__addCollider(pCollider);
|
||||
|
||||
if (pCollider)
|
||||
{
|
||||
// 双向绑定
|
||||
this->_pCollider = pCollider;
|
||||
pCollider->_pParentNode = this;
|
||||
this->_collider = pCollider;
|
||||
pCollider->_parentNode = this;
|
||||
}
|
||||
else
|
||||
{
|
||||
this->_pCollider = nullptr;
|
||||
this->_collider = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::Node::addColliableName(const String& collliderName)
|
||||
{
|
||||
unsigned int hash = collliderName.getHashCode();
|
||||
_vColliders.insert(hash);
|
||||
_colliders.insert(hash);
|
||||
}
|
||||
|
||||
#ifdef HIGHER_THAN_VS2012
|
||||
|
|
@ -610,7 +610,7 @@ void e2d::Node::addColliableName(const std::initializer_list<String>& vColllider
|
|||
void e2d::Node::removeColliableName(const String& collliderName)
|
||||
{
|
||||
unsigned int hash = collliderName.getHashCode();
|
||||
_vColliders.erase(hash);
|
||||
_colliders.erase(hash);
|
||||
}
|
||||
|
||||
void e2d::Node::addChild(Node * child, int order /* = 0 */)
|
||||
|
|
@ -619,32 +619,32 @@ void e2d::Node::addChild(Node * child, int order /* = 0 */)
|
|||
|
||||
if (child)
|
||||
{
|
||||
ASSERT(child->_pParent == nullptr, "Node already added. It can't be added again!");
|
||||
ASSERT(child->_parent == nullptr, "Node already added. It can't be added again!");
|
||||
|
||||
for (Node * parent = this; parent != nullptr; parent = parent->getParent())
|
||||
{
|
||||
ASSERT(child != parent, "A Node cannot be the child of his own children!");
|
||||
}
|
||||
|
||||
_vChildren.push_back(child);
|
||||
_children.push_back(child);
|
||||
|
||||
child->setOrder(order);
|
||||
|
||||
child->retain();
|
||||
|
||||
child->_pParent = this;
|
||||
child->_parent = this;
|
||||
|
||||
if (this->_pParentScene)
|
||||
if (this->_parentScene)
|
||||
{
|
||||
child->_setParentScene(this->_pParentScene);
|
||||
child->_setParentScene(this->_parentScene);
|
||||
}
|
||||
|
||||
// 更新子节点透明度
|
||||
child->_updateOpacity();
|
||||
// 更新节点转换
|
||||
child->_bTransformNeeded = true;
|
||||
child->_needTransform = true;
|
||||
// 更新子节点排序
|
||||
_bSortChildrenNeeded = true;
|
||||
_needSort = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -660,12 +660,12 @@ void e2d::Node::addChild(const std::initializer_list<Node*>& vNodes, int order)
|
|||
|
||||
e2d::Node * e2d::Node::getParent() const
|
||||
{
|
||||
return _pParent;
|
||||
return _parent;
|
||||
}
|
||||
|
||||
e2d::Scene * e2d::Node::getParentScene() const
|
||||
{
|
||||
return _pParentScene;
|
||||
return _parentScene;
|
||||
}
|
||||
|
||||
std::vector<e2d::Node*> e2d::Node::getChildren(const String& name) const
|
||||
|
|
@ -673,10 +673,10 @@ std::vector<e2d::Node*> e2d::Node::getChildren(const String& name) const
|
|||
std::vector<Node*> vChildren;
|
||||
unsigned int hash = name.getHashCode();
|
||||
|
||||
for (auto child : _vChildren)
|
||||
for (auto child : _children)
|
||||
{
|
||||
// 不同的名称可能会有相同的 Hash 值,但是先比较 Hash 可以提升搜索速度
|
||||
if (child->_nHashName == hash && child->_name == name)
|
||||
if (child->_hashName == hash && child->_name == name)
|
||||
{
|
||||
vChildren.push_back(child);
|
||||
}
|
||||
|
|
@ -688,10 +688,10 @@ e2d::Node * e2d::Node::getChild(const String& name) const
|
|||
{
|
||||
unsigned int hash = name.getHashCode();
|
||||
|
||||
for (auto child : _vChildren)
|
||||
for (auto child : _children)
|
||||
{
|
||||
// 不同的名称可能会有相同的 Hash 值,但是先比较 Hash 可以提升搜索速度
|
||||
if (child->_nHashName == hash && child->_name == name)
|
||||
if (child->_hashName == hash && child->_name == name)
|
||||
{
|
||||
return child;
|
||||
}
|
||||
|
|
@ -701,19 +701,19 @@ e2d::Node * e2d::Node::getChild(const String& name) const
|
|||
|
||||
std::vector<e2d::Node*> e2d::Node::getAllChildren() const
|
||||
{
|
||||
return _vChildren;
|
||||
return _children;
|
||||
}
|
||||
|
||||
int e2d::Node::getChildrenCount() const
|
||||
{
|
||||
return static_cast<int>(_vChildren.size());
|
||||
return static_cast<int>(_children.size());
|
||||
}
|
||||
|
||||
void e2d::Node::removeFromParent()
|
||||
{
|
||||
if (_pParent)
|
||||
if (_parent)
|
||||
{
|
||||
_pParent->removeChild(this);
|
||||
_parent->removeChild(this);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -721,22 +721,22 @@ bool e2d::Node::removeChild(Node * child)
|
|||
{
|
||||
WARN_IF(child == nullptr, "Node::removeChildren NULL pointer exception.");
|
||||
|
||||
if (_vChildren.empty())
|
||||
if (_children.empty())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (child)
|
||||
{
|
||||
size_t size = _vChildren.size();
|
||||
size_t size = _children.size();
|
||||
for (size_t i = 0; i < size; i++)
|
||||
{
|
||||
if (_vChildren[i] == child)
|
||||
if (_children[i] == child)
|
||||
{
|
||||
_vChildren.erase(_vChildren.begin() + i);
|
||||
child->_pParent = nullptr;
|
||||
_children.erase(_children.begin() + i);
|
||||
child->_parent = nullptr;
|
||||
|
||||
if (child->_pParentScene)
|
||||
if (child->_parentScene)
|
||||
{
|
||||
child->_setParentScene(nullptr);
|
||||
}
|
||||
|
|
@ -753,7 +753,7 @@ void e2d::Node::removeChildren(const String& childName)
|
|||
{
|
||||
WARN_IF(childName.isEmpty(), "Invalid Node name.");
|
||||
|
||||
if (_vChildren.empty())
|
||||
if (_children.empty())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
|
@ -761,15 +761,15 @@ void e2d::Node::removeChildren(const String& childName)
|
|||
// 计算名称 Hash 值
|
||||
unsigned int hash = childName.getHashCode();
|
||||
|
||||
size_t size = _vChildren.size();
|
||||
size_t size = _children.size();
|
||||
for (size_t i = 0; i < size; i++)
|
||||
{
|
||||
auto child = _vChildren[i];
|
||||
if (child->_nHashName == hash && child->_name == childName)
|
||||
auto child = _children[i];
|
||||
if (child->_hashName == hash && child->_name == childName)
|
||||
{
|
||||
_vChildren.erase(_vChildren.begin() + i);
|
||||
child->_pParent = nullptr;
|
||||
if (child->_pParentScene)
|
||||
_children.erase(_children.begin() + i);
|
||||
child->_parent = nullptr;
|
||||
if (child->_parentScene)
|
||||
{
|
||||
child->_setParentScene(nullptr);
|
||||
}
|
||||
|
|
@ -781,12 +781,12 @@ void e2d::Node::removeChildren(const String& childName)
|
|||
void e2d::Node::clearAllChildren()
|
||||
{
|
||||
// 所有节点的引用计数减一
|
||||
for (auto child : _vChildren)
|
||||
for (auto child : _children)
|
||||
{
|
||||
child->release();
|
||||
}
|
||||
// 清空储存节点的容器
|
||||
_vChildren.clear();
|
||||
_children.clear();
|
||||
}
|
||||
|
||||
void e2d::Node::runAction(Action * action)
|
||||
|
|
@ -873,13 +873,13 @@ bool e2d::Node::isPointIn(Point point) const
|
|||
{
|
||||
BOOL ret = 0;
|
||||
// 如果存在碰撞体,用碰撞体判断
|
||||
if (_pCollider)
|
||||
if (_collider)
|
||||
{
|
||||
_pCollider->getD2dGeometry()->FillContainsPoint(
|
||||
_collider->getD2dGeometry()->FillContainsPoint(
|
||||
D2D1::Point2F(
|
||||
static_cast<float>(point.x),
|
||||
static_cast<float>(point.y)),
|
||||
_MatriFinal,
|
||||
float(point.x),
|
||||
float(point.y)),
|
||||
_finalMatri,
|
||||
&ret
|
||||
);
|
||||
}
|
||||
|
|
@ -888,15 +888,15 @@ bool e2d::Node::isPointIn(Point point) const
|
|||
// 为节点创建一个临时碰撞体
|
||||
ID2D1RectangleGeometry * rect;
|
||||
Renderer::getID2D1Factory()->CreateRectangleGeometry(
|
||||
D2D1::RectF(0, 0, _fWidth, _fHeight),
|
||||
D2D1::RectF(0, 0, _width, _height),
|
||||
&rect
|
||||
);
|
||||
// 判断点是否在碰撞体内
|
||||
rect->FillContainsPoint(
|
||||
D2D1::Point2F(
|
||||
static_cast<float>(point.x),
|
||||
static_cast<float>(point.y)),
|
||||
_MatriFinal,
|
||||
float(point.x),
|
||||
float(point.y)),
|
||||
_finalMatri,
|
||||
&ret
|
||||
);
|
||||
// 删除临时创建的碰撞体
|
||||
|
|
@ -914,9 +914,9 @@ bool e2d::Node::isPointIn(Point point) const
|
|||
bool e2d::Node::isIntersectWith(const Node * node) const
|
||||
{
|
||||
// 如果存在碰撞体,用碰撞体判断
|
||||
if (this->_pCollider && node->_pCollider)
|
||||
if (this->_collider && node->_collider)
|
||||
{
|
||||
Relation relation = this->_pCollider->getRelationWith(node->_pCollider);
|
||||
Relation relation = this->_collider->getRelationWith(node->_collider);
|
||||
if ((relation != Relation::UNKNOWN) &&
|
||||
(relation != Relation::DISJOINT))
|
||||
{
|
||||
|
|
@ -933,24 +933,24 @@ bool e2d::Node::isIntersectWith(const Node * node) const
|
|||
|
||||
// 根据自身大小位置创建矩形
|
||||
Renderer::getID2D1Factory()->CreateRectangleGeometry(
|
||||
D2D1::RectF(0, 0, _fWidth, _fHeight),
|
||||
D2D1::RectF(0, 0, _width, _height),
|
||||
&pRect1
|
||||
);
|
||||
// 根据二维矩阵进行转换
|
||||
Renderer::getID2D1Factory()->CreateTransformedGeometry(
|
||||
pRect1,
|
||||
_MatriFinal,
|
||||
_finalMatri,
|
||||
&pCollider
|
||||
);
|
||||
// 根据相比较节点的大小位置创建矩形
|
||||
Renderer::getID2D1Factory()->CreateRectangleGeometry(
|
||||
D2D1::RectF(0, 0, node->_fWidth, node->_fHeight),
|
||||
D2D1::RectF(0, 0, node->_width, node->_height),
|
||||
&pRect2
|
||||
);
|
||||
// 获取相交状态
|
||||
pCollider->CompareWithGeometry(
|
||||
pRect2,
|
||||
node->_MatriFinal,
|
||||
node->_finalMatri,
|
||||
&relation
|
||||
);
|
||||
// 删除临时创建的碰撞体
|
||||
|
|
@ -969,13 +969,13 @@ bool e2d::Node::isIntersectWith(const Node * node) const
|
|||
|
||||
void e2d::Node::setAutoUpdate(bool bAutoUpdate)
|
||||
{
|
||||
_bAutoUpdate = bAutoUpdate;
|
||||
_autoUpdate = bAutoUpdate;
|
||||
}
|
||||
|
||||
void e2d::Node::setDefaultPiovt(double defaultPiovtX, double defaultPiovtY)
|
||||
{
|
||||
s_fDefaultPiovtX = min(max(static_cast<float>(defaultPiovtX), 0), 1);
|
||||
s_fDefaultPiovtY = min(max(static_cast<float>(defaultPiovtY), 0), 1);
|
||||
s_fDefaultPiovtX = min(max(float(defaultPiovtX), 0), 1);
|
||||
s_fDefaultPiovtY = min(max(float(defaultPiovtY), 0), 1);
|
||||
}
|
||||
|
||||
void e2d::Node::setDefaultColliderEnable(bool enable)
|
||||
|
|
@ -986,8 +986,8 @@ void e2d::Node::setDefaultColliderEnable(bool enable)
|
|||
void e2d::Node::onDestroy()
|
||||
{
|
||||
ActionManager::__clearAllBindedWith(this);
|
||||
ColliderManager::__removeCollider(_pCollider);
|
||||
for (auto child : _vChildren)
|
||||
ColliderManager::__removeCollider(_collider);
|
||||
for (auto child : _children)
|
||||
{
|
||||
SafeRelease(&child);
|
||||
}
|
||||
|
|
@ -1010,7 +1010,7 @@ void e2d::Node::stopAllActions()
|
|||
|
||||
void e2d::Node::setVisiable(bool value)
|
||||
{
|
||||
_bVisiable = value;
|
||||
_visiable = value;
|
||||
}
|
||||
|
||||
void e2d::Node::setName(const String& name)
|
||||
|
|
@ -1022,14 +1022,14 @@ void e2d::Node::setName(const String& name)
|
|||
// 保存节点名
|
||||
_name = name;
|
||||
// 保存节点 Hash 名
|
||||
_nHashName = name.getHashCode();
|
||||
_hashName = name.getHashCode();
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::Node::_setParentScene(Scene * scene)
|
||||
{
|
||||
_pParentScene = scene;
|
||||
for (auto child : _vChildren)
|
||||
_parentScene = scene;
|
||||
for (auto child : _children)
|
||||
{
|
||||
child->_setParentScene(scene);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
#include "..\..\e2dshape.h"
|
||||
|
||||
e2d::Circle::Circle()
|
||||
: _fRadius(0)
|
||||
: _radius(0)
|
||||
{
|
||||
this->setPivot(0.5, 0.5);
|
||||
}
|
||||
|
|
@ -32,28 +32,28 @@ e2d::Circle::~Circle()
|
|||
|
||||
double e2d::Circle::getRadius() const
|
||||
{
|
||||
return _fRadius;
|
||||
return _radius;
|
||||
}
|
||||
|
||||
void e2d::Circle::setRadius(double radius)
|
||||
{
|
||||
_fRadius = static_cast<float>(radius);
|
||||
_radius = float(radius);
|
||||
Node::setSize(radius * 2, radius * 2);
|
||||
}
|
||||
|
||||
void e2d::Circle::_renderLine()
|
||||
{
|
||||
Renderer::getRenderTarget()->DrawEllipse(
|
||||
D2D1::Ellipse(D2D1::Point2F(_fRadius, _fRadius), _fRadius, _fRadius),
|
||||
D2D1::Ellipse(D2D1::Point2F(_radius, _radius), _radius, _radius),
|
||||
Renderer::getSolidColorBrush(),
|
||||
_fStrokeWidth
|
||||
_strokeWidth
|
||||
);
|
||||
}
|
||||
|
||||
void e2d::Circle::_renderFill()
|
||||
{
|
||||
Renderer::getRenderTarget()->FillEllipse(
|
||||
D2D1::Ellipse(D2D1::Point2F(_fRadius, _fRadius), _fRadius, _fRadius),
|
||||
D2D1::Ellipse(D2D1::Point2F(_radius, _radius), _radius, _radius),
|
||||
Renderer::getSolidColorBrush()
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
#include "..\..\e2dshape.h"
|
||||
|
||||
e2d::Ellipse::Ellipse()
|
||||
: _fRadiusX(0)
|
||||
, _fRadiusY(0)
|
||||
: _radiusX(0)
|
||||
, _radiusY(0)
|
||||
{
|
||||
this->setPivot(0.5, 0.5);
|
||||
}
|
||||
|
|
@ -36,39 +36,39 @@ e2d::Ellipse::~Ellipse()
|
|||
|
||||
double e2d::Ellipse::getRadiusX() const
|
||||
{
|
||||
return _fRadiusX;
|
||||
return _radiusX;
|
||||
}
|
||||
|
||||
double e2d::Ellipse::getRadiusY() const
|
||||
{
|
||||
return _fRadiusY;
|
||||
return _radiusY;
|
||||
}
|
||||
|
||||
void e2d::Ellipse::setRadiusX(double radiusX)
|
||||
{
|
||||
_fRadiusX = static_cast<float>(radiusX);
|
||||
_radiusX = float(radiusX);
|
||||
Node::setWidth(radiusX * 2);
|
||||
}
|
||||
|
||||
void e2d::Ellipse::setRadiusY(double radiusY)
|
||||
{
|
||||
_fRadiusY = static_cast<float>(radiusY);
|
||||
_radiusY = float(radiusY);
|
||||
Node::setHeight(radiusY * 2);
|
||||
}
|
||||
|
||||
void e2d::Ellipse::_renderLine()
|
||||
{
|
||||
Renderer::getRenderTarget()->DrawEllipse(
|
||||
D2D1::Ellipse(D2D1::Point2F(_fRadiusX, _fRadiusY), _fRadiusX, _fRadiusY),
|
||||
D2D1::Ellipse(D2D1::Point2F(_radiusX, _radiusY), _radiusX, _radiusY),
|
||||
Renderer::getSolidColorBrush(),
|
||||
_fStrokeWidth
|
||||
_strokeWidth
|
||||
);
|
||||
}
|
||||
|
||||
void e2d::Ellipse::_renderFill()
|
||||
{
|
||||
Renderer::getRenderTarget()->FillEllipse(
|
||||
D2D1::Ellipse(D2D1::Point2F(_fRadiusX, _fRadiusY), _fRadiusX, _fRadiusY),
|
||||
D2D1::Ellipse(D2D1::Point2F(_radiusX, _radiusY), _radiusX, _radiusY),
|
||||
Renderer::getSolidColorBrush()
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -35,16 +35,16 @@ e2d::Rect::~Rect()
|
|||
void e2d::Rect::_renderLine()
|
||||
{
|
||||
Renderer::getRenderTarget()->DrawRectangle(
|
||||
D2D1::RectF(0, 0, _fWidth, _fHeight),
|
||||
D2D1::RectF(0, 0, _width, _height),
|
||||
Renderer::getSolidColorBrush(),
|
||||
_fStrokeWidth
|
||||
_strokeWidth
|
||||
);
|
||||
}
|
||||
|
||||
void e2d::Rect::_renderFill()
|
||||
{
|
||||
Renderer::getRenderTarget()->FillRectangle(
|
||||
D2D1::RectF(0, 0, _fWidth, _fHeight),
|
||||
D2D1::RectF(0, 0, _width, _height),
|
||||
Renderer::getSolidColorBrush()
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,28 +1,28 @@
|
|||
#include "..\..\e2dshape.h"
|
||||
|
||||
e2d::RoundRect::RoundRect()
|
||||
: _fRadiusX(0)
|
||||
, _fRadiusY(0)
|
||||
: _radiusX(0)
|
||||
, _radiusY(0)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::RoundRect::RoundRect(double width, double height, double radiusX, double radiusY)
|
||||
: _fRadiusX(static_cast<float>(radiusX))
|
||||
, _fRadiusY(static_cast<float>(radiusY))
|
||||
: _radiusX(float(radiusX))
|
||||
, _radiusY(float(radiusY))
|
||||
{
|
||||
this->setSize(width, height);
|
||||
}
|
||||
|
||||
e2d::RoundRect::RoundRect(Size size, double radiusX, double radiusY)
|
||||
: _fRadiusX(static_cast<float>(radiusX))
|
||||
, _fRadiusY(static_cast<float>(radiusY))
|
||||
: _radiusX(float(radiusX))
|
||||
, _radiusY(float(radiusY))
|
||||
{
|
||||
this->setSize(size);
|
||||
}
|
||||
|
||||
e2d::RoundRect::RoundRect(double top, double left, double width, double height, double radiusX, double radiusY)
|
||||
: _fRadiusX(static_cast<float>(radiusX))
|
||||
, _fRadiusY(static_cast<float>(radiusY))
|
||||
: _radiusX(float(radiusX))
|
||||
, _radiusY(float(radiusY))
|
||||
{
|
||||
this->setPivot(0, 0);
|
||||
this->setPos(top, left);
|
||||
|
|
@ -30,8 +30,8 @@ e2d::RoundRect::RoundRect(double top, double left, double width, double height,
|
|||
}
|
||||
|
||||
e2d::RoundRect::RoundRect(Point topLeft, Size size, double radiusX, double radiusY)
|
||||
: _fRadiusX(static_cast<float>(radiusX))
|
||||
, _fRadiusY(static_cast<float>(radiusY))
|
||||
: _radiusX(float(radiusX))
|
||||
, _radiusY(float(radiusY))
|
||||
{
|
||||
this->setPivot(0, 0);
|
||||
this->setPos(topLeft);
|
||||
|
|
@ -44,37 +44,37 @@ e2d::RoundRect::~RoundRect()
|
|||
|
||||
double e2d::RoundRect::getRadiusX() const
|
||||
{
|
||||
return _fRadiusX;
|
||||
return _radiusX;
|
||||
}
|
||||
|
||||
double e2d::RoundRect::getRadiusY() const
|
||||
{
|
||||
return _fRadiusY;
|
||||
return _radiusY;
|
||||
}
|
||||
|
||||
void e2d::RoundRect::setRadiusX(double radiusX)
|
||||
{
|
||||
_fRadiusX = static_cast<float>(radiusX);
|
||||
_radiusX = float(radiusX);
|
||||
}
|
||||
|
||||
void e2d::RoundRect::setRadiusY(double radiusY)
|
||||
{
|
||||
_fRadiusY = static_cast<float>(radiusY);
|
||||
_radiusY = float(radiusY);
|
||||
}
|
||||
|
||||
void e2d::RoundRect::_renderLine()
|
||||
{
|
||||
Renderer::getRenderTarget()->DrawRoundedRectangle(
|
||||
D2D1::RoundedRect(D2D1::RectF(0, 0, _fWidth, _fHeight), _fRadiusX, _fRadiusY),
|
||||
D2D1::RoundedRect(D2D1::RectF(0, 0, _width, _height), _radiusX, _radiusY),
|
||||
Renderer::getSolidColorBrush(),
|
||||
_fStrokeWidth
|
||||
_strokeWidth
|
||||
);
|
||||
}
|
||||
|
||||
void e2d::RoundRect::_renderFill()
|
||||
{
|
||||
Renderer::getRenderTarget()->FillRoundedRectangle(
|
||||
D2D1::RoundedRect(D2D1::RectF(0, 0, _fWidth, _fHeight), _fRadiusX, _fRadiusY),
|
||||
D2D1::RoundedRect(D2D1::RectF(0, 0, _width, _height), _radiusX, _radiusY),
|
||||
Renderer::getSolidColorBrush()
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
#include "..\..\e2dshape.h"
|
||||
|
||||
e2d::Shape::Shape()
|
||||
: _nStyle(ShapeStyle::SOLID)
|
||||
, _nFillColor(Color::WHITE)
|
||||
, _nLineColor(Color::BLUE, 0.5)
|
||||
, _fStrokeWidth(1)
|
||||
: _style(ShapeStyle::SOLID)
|
||||
, _fillColor(Color::WHITE)
|
||||
, _lineColor(Color::BLUE, 0.5)
|
||||
, _strokeWidth(1)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
@ -15,30 +15,30 @@ e2d::Shape::~Shape()
|
|||
void e2d::Shape::onRender()
|
||||
{
|
||||
auto pBrush = Renderer::getSolidColorBrush();
|
||||
pBrush->SetOpacity(_fDisplayOpacity);
|
||||
pBrush->SetOpacity(_displayOpacity);
|
||||
|
||||
switch (_nStyle)
|
||||
switch (_style)
|
||||
{
|
||||
case ShapeStyle::FILL:
|
||||
{
|
||||
pBrush->SetColor(_nFillColor.toColorF());
|
||||
pBrush->SetColor(_fillColor.toColorF());
|
||||
this->_renderFill();
|
||||
|
||||
pBrush->SetColor(_nLineColor.toColorF());
|
||||
pBrush->SetColor(_lineColor.toColorF());
|
||||
this->_renderLine();
|
||||
break;
|
||||
}
|
||||
|
||||
case ShapeStyle::ROUND:
|
||||
{
|
||||
pBrush->SetColor(_nLineColor.toColorF());
|
||||
pBrush->SetColor(_lineColor.toColorF());
|
||||
this->_renderLine();
|
||||
break;
|
||||
}
|
||||
|
||||
case ShapeStyle::SOLID:
|
||||
{
|
||||
pBrush->SetColor(_nFillColor.toColorF());
|
||||
pBrush->SetColor(_fillColor.toColorF());
|
||||
this->_renderFill();
|
||||
break;
|
||||
}
|
||||
|
|
@ -50,40 +50,40 @@ void e2d::Shape::onRender()
|
|||
|
||||
e2d::Color e2d::Shape::getFillColor() const
|
||||
{
|
||||
return _nFillColor;
|
||||
return _fillColor;
|
||||
}
|
||||
|
||||
e2d::Color e2d::Shape::getLineColor() const
|
||||
{
|
||||
return _nLineColor;
|
||||
return _lineColor;
|
||||
}
|
||||
|
||||
double e2d::Shape::getStrokeWidth() const
|
||||
{
|
||||
return _fStrokeWidth;
|
||||
return _strokeWidth;
|
||||
}
|
||||
|
||||
e2d::ShapeStyle e2d::Shape::getStyle() const
|
||||
{
|
||||
return _nStyle;
|
||||
return _style;
|
||||
}
|
||||
|
||||
void e2d::Shape::setFillColor(Color fillColor)
|
||||
{
|
||||
_nFillColor = fillColor;
|
||||
_fillColor = fillColor;
|
||||
}
|
||||
|
||||
void e2d::Shape::setLineColor(Color lineColor)
|
||||
{
|
||||
_nLineColor = lineColor;
|
||||
_lineColor = lineColor;
|
||||
}
|
||||
|
||||
void e2d::Shape::setStrokeWidth(double strokeWidth)
|
||||
{
|
||||
_fStrokeWidth = static_cast<float>(strokeWidth);
|
||||
_strokeWidth = float(strokeWidth);
|
||||
}
|
||||
|
||||
void e2d::Shape::setStyle(ShapeStyle style)
|
||||
{
|
||||
_nStyle = style;
|
||||
_style = style;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,37 +2,37 @@
|
|||
|
||||
|
||||
e2d::Sprite::Sprite()
|
||||
: _pImage(nullptr)
|
||||
: _image(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::Sprite::Sprite(Image * image)
|
||||
: _pImage(nullptr)
|
||||
: _image(nullptr)
|
||||
{
|
||||
open(image);
|
||||
}
|
||||
|
||||
e2d::Sprite::Sprite(const String& filePath)
|
||||
: _pImage(nullptr)
|
||||
: _image(nullptr)
|
||||
{
|
||||
open(filePath);
|
||||
}
|
||||
|
||||
e2d::Sprite::Sprite(int resNameId, const String& resType)
|
||||
: _pImage(nullptr)
|
||||
: _image(nullptr)
|
||||
{
|
||||
open(resNameId, resType);
|
||||
}
|
||||
|
||||
e2d::Sprite::Sprite(const String& filePath, double x, double y, double width, double height)
|
||||
: _pImage(nullptr)
|
||||
: _image(nullptr)
|
||||
{
|
||||
open(filePath);
|
||||
crop(x, y, width, height);
|
||||
}
|
||||
|
||||
e2d::Sprite::Sprite(int resNameId, const String& resType, double x, double y, double width, double height)
|
||||
: _pImage(nullptr)
|
||||
: _image(nullptr)
|
||||
{
|
||||
open(resNameId, resType);
|
||||
crop(x, y, width, height);
|
||||
|
|
@ -46,11 +46,11 @@ bool e2d::Sprite::open(Image * image)
|
|||
{
|
||||
if (image)
|
||||
{
|
||||
SafeRelease(&_pImage);
|
||||
_pImage = image;
|
||||
_pImage->retain();
|
||||
SafeRelease(&_image);
|
||||
_image = image;
|
||||
_image->retain();
|
||||
|
||||
Node::setSize(_pImage->getWidth(), _pImage->getHeight());
|
||||
Node::setSize(_image->getWidth(), _image->getHeight());
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
|
@ -58,15 +58,15 @@ bool e2d::Sprite::open(Image * image)
|
|||
|
||||
bool e2d::Sprite::open(const String& filePath)
|
||||
{
|
||||
if (!_pImage)
|
||||
if (!_image)
|
||||
{
|
||||
_pImage = new (std::nothrow) Image();
|
||||
_pImage->retain();
|
||||
_image = new (std::nothrow) Image();
|
||||
_image->retain();
|
||||
}
|
||||
|
||||
if (_pImage->open(filePath))
|
||||
if (_image->open(filePath))
|
||||
{
|
||||
Node::setSize(_pImage->getWidth(), _pImage->getHeight());
|
||||
Node::setSize(_image->getWidth(), _image->getHeight());
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
|
@ -74,15 +74,15 @@ bool e2d::Sprite::open(const String& filePath)
|
|||
|
||||
bool e2d::Sprite::open(int resNameId, const String& resType)
|
||||
{
|
||||
if (!_pImage)
|
||||
if (!_image)
|
||||
{
|
||||
_pImage = new (std::nothrow) Image();
|
||||
_pImage->retain();
|
||||
_image = new (std::nothrow) Image();
|
||||
_image->retain();
|
||||
}
|
||||
|
||||
if (_pImage->open(resNameId, resType))
|
||||
if (_image->open(resNameId, resType))
|
||||
{
|
||||
Node::setSize(_pImage->getWidth(), _pImage->getHeight());
|
||||
Node::setSize(_image->getWidth(), _image->getHeight());
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
|
@ -90,36 +90,36 @@ bool e2d::Sprite::open(int resNameId, const String& resType)
|
|||
|
||||
void e2d::Sprite::crop(double x, double y, double width, double height)
|
||||
{
|
||||
_pImage->crop(x, y, width, height);
|
||||
_image->crop(x, y, width, height);
|
||||
Node::setSize(
|
||||
min(max(width, 0), _pImage->getSourceWidth() - _pImage->getCropX()),
|
||||
min(max(height, 0), _pImage->getSourceHeight() - _pImage->getCropY())
|
||||
min(max(width, 0), _image->getSourceWidth() - _image->getCropX()),
|
||||
min(max(height, 0), _image->getSourceHeight() - _image->getCropY())
|
||||
);
|
||||
}
|
||||
|
||||
e2d::Image * e2d::Sprite::getImage() const
|
||||
{
|
||||
return _pImage;
|
||||
return _image;
|
||||
}
|
||||
|
||||
void e2d::Sprite::onRender()
|
||||
{
|
||||
if (_pImage && _pImage->getBitmap())
|
||||
if (_image && _image->getBitmap())
|
||||
{
|
||||
// »ñȡͼƬ²Ã¼ôλÖÃ
|
||||
float fCropX = static_cast<float>(_pImage->getCropX());
|
||||
float fCropY = static_cast<float>(_pImage->getCropY());
|
||||
float fCropX = float(_image->getCropX());
|
||||
float fCropY = float(_image->getCropY());
|
||||
// äÖȾͼƬ
|
||||
Renderer::getRenderTarget()->DrawBitmap(
|
||||
_pImage->getBitmap(),
|
||||
D2D1::RectF(0, 0, _fWidth, _fHeight),
|
||||
_fDisplayOpacity,
|
||||
_image->getBitmap(),
|
||||
D2D1::RectF(0, 0, _width, _height),
|
||||
_displayOpacity,
|
||||
D2D1_BITMAP_INTERPOLATION_MODE_LINEAR,
|
||||
D2D1::RectF(
|
||||
fCropX,
|
||||
fCropY,
|
||||
fCropX + _fWidth,
|
||||
fCropY + _fHeight
|
||||
fCropX + _width,
|
||||
fCropY + _height
|
||||
)
|
||||
);
|
||||
}
|
||||
|
|
@ -128,5 +128,5 @@ void e2d::Sprite::onRender()
|
|||
void e2d::Sprite::onDestroy()
|
||||
{
|
||||
Node::onDestroy();
|
||||
SafeRelease(&_pImage);
|
||||
SafeRelease(&_image);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,34 +2,34 @@
|
|||
|
||||
|
||||
e2d::Text::Text()
|
||||
: _TextStyle()
|
||||
, _pDWriteTextLayout(nullptr)
|
||||
, _pDWriteTextFormat(nullptr)
|
||||
: _style()
|
||||
, _textLayout(nullptr)
|
||||
, _textFormat(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::Text::Text(const String& text)
|
||||
: _TextStyle()
|
||||
, _pDWriteTextLayout(nullptr)
|
||||
, _pDWriteTextFormat(nullptr)
|
||||
, _sText(text)
|
||||
: _style()
|
||||
, _textLayout(nullptr)
|
||||
, _textFormat(nullptr)
|
||||
, _text(text)
|
||||
{
|
||||
_reset();
|
||||
}
|
||||
|
||||
e2d::Text::Text(TextStyle textStyle)
|
||||
: _TextStyle(textStyle)
|
||||
, _pDWriteTextLayout(nullptr)
|
||||
, _pDWriteTextFormat(nullptr)
|
||||
: _style(textStyle)
|
||||
, _textLayout(nullptr)
|
||||
, _textFormat(nullptr)
|
||||
{
|
||||
_reset();
|
||||
}
|
||||
|
||||
e2d::Text::Text(const String& text, TextStyle textStyle)
|
||||
: _TextStyle(textStyle)
|
||||
, _pDWriteTextLayout(nullptr)
|
||||
, _pDWriteTextFormat(nullptr)
|
||||
, _sText(text)
|
||||
: _style(textStyle)
|
||||
, _textLayout(nullptr)
|
||||
, _textFormat(nullptr)
|
||||
, _text(text)
|
||||
{
|
||||
_reset();
|
||||
}
|
||||
|
|
@ -51,7 +51,7 @@ e2d::Text::Text(
|
|||
UINT32 outlineColor,
|
||||
UINT32 outlineWidth
|
||||
)
|
||||
: _TextStyle(
|
||||
: _style(
|
||||
fontFamily,
|
||||
fontSize,
|
||||
color,
|
||||
|
|
@ -67,70 +67,70 @@ e2d::Text::Text(
|
|||
outlineColor,
|
||||
outlineWidth
|
||||
)
|
||||
, _pDWriteTextLayout(nullptr)
|
||||
, _pDWriteTextFormat(nullptr)
|
||||
, _sText(text)
|
||||
, _textLayout(nullptr)
|
||||
, _textFormat(nullptr)
|
||||
, _text(text)
|
||||
{
|
||||
_reset();
|
||||
}
|
||||
|
||||
e2d::Text::~Text()
|
||||
{
|
||||
SafeReleaseInterface(&_pDWriteTextFormat);
|
||||
SafeReleaseInterface(&_pDWriteTextLayout);
|
||||
SafeReleaseInterface(&_textFormat);
|
||||
SafeReleaseInterface(&_textLayout);
|
||||
}
|
||||
|
||||
e2d::String e2d::Text::getText() const
|
||||
{
|
||||
return _sText;
|
||||
return _text;
|
||||
}
|
||||
|
||||
e2d::TextStyle e2d::Text::getTextStyle() const
|
||||
{
|
||||
return _TextStyle;
|
||||
return _style;
|
||||
}
|
||||
|
||||
e2d::String e2d::Text::getFontFamily() const
|
||||
{
|
||||
return _TextStyle.fontFamily;
|
||||
return _style.fontFamily;
|
||||
}
|
||||
|
||||
double e2d::Text::getFontSize() const
|
||||
{
|
||||
return _TextStyle.fontSize;
|
||||
return _style.fontSize;
|
||||
}
|
||||
|
||||
UINT32 e2d::Text::getFontWeight() const
|
||||
{
|
||||
return _TextStyle.fontWeight;
|
||||
return _style.fontWeight;
|
||||
}
|
||||
|
||||
e2d::Color e2d::Text::getColor() const
|
||||
{
|
||||
return _TextStyle.color;
|
||||
return _style.color;
|
||||
}
|
||||
|
||||
e2d::Color e2d::Text::getOutlineColor() const
|
||||
{
|
||||
return _TextStyle.outlineColor;
|
||||
return _style.outlineColor;
|
||||
}
|
||||
|
||||
double e2d::Text::getOutlineWidth() const
|
||||
{
|
||||
return _TextStyle.outlineWidth;
|
||||
return _style.outlineWidth;
|
||||
}
|
||||
|
||||
e2d::LineJoin e2d::Text::getOutlineJoin() const
|
||||
{
|
||||
return _TextStyle.outlineJoin;
|
||||
return _style.outlineJoin;
|
||||
}
|
||||
|
||||
int e2d::Text::getLineCount() const
|
||||
{
|
||||
if (_pDWriteTextLayout)
|
||||
if (_textLayout)
|
||||
{
|
||||
DWRITE_TEXT_METRICS metrics;
|
||||
_pDWriteTextLayout->GetMetrics(&metrics);
|
||||
_textLayout->GetMetrics(&metrics);
|
||||
return static_cast<int>(metrics.lineCount);
|
||||
}
|
||||
else
|
||||
|
|
@ -141,81 +141,81 @@ int e2d::Text::getLineCount() const
|
|||
|
||||
bool e2d::Text::isItalic() const
|
||||
{
|
||||
return _TextStyle.italic;
|
||||
return _style.italic;
|
||||
}
|
||||
|
||||
bool e2d::Text::hasStrikethrough() const
|
||||
{
|
||||
return _TextStyle.hasStrikethrough;
|
||||
return _style.hasStrikethrough;
|
||||
}
|
||||
|
||||
bool e2d::Text::hasUnderline() const
|
||||
{
|
||||
return _TextStyle.hasUnderline;
|
||||
return _style.hasUnderline;
|
||||
}
|
||||
|
||||
bool e2d::Text::hasOutline() const
|
||||
{
|
||||
return _TextStyle.hasOutline;
|
||||
return _style.hasOutline;
|
||||
}
|
||||
|
||||
void e2d::Text::setText(const String& text)
|
||||
{
|
||||
_sText = text;
|
||||
_text = text;
|
||||
_reset();
|
||||
}
|
||||
|
||||
void e2d::Text::setTextStyle(TextStyle textStyle)
|
||||
{
|
||||
_TextStyle = textStyle;
|
||||
_style = textStyle;
|
||||
_reset();
|
||||
}
|
||||
|
||||
void e2d::Text::setFontFamily(const String& fontFamily)
|
||||
{
|
||||
_TextStyle.fontFamily = fontFamily;
|
||||
_style.fontFamily = fontFamily;
|
||||
_reset();
|
||||
}
|
||||
|
||||
void e2d::Text::setFontSize(double fontSize)
|
||||
{
|
||||
_TextStyle.fontSize = fontSize;
|
||||
_style.fontSize = fontSize;
|
||||
_reset();
|
||||
}
|
||||
|
||||
void e2d::Text::setFontWeight(UINT32 fontWeight)
|
||||
{
|
||||
_TextStyle.fontWeight = fontWeight;
|
||||
_style.fontWeight = fontWeight;
|
||||
_reset();
|
||||
}
|
||||
|
||||
void e2d::Text::setColor(Color color)
|
||||
{
|
||||
_TextStyle.color = color;
|
||||
_style.color = color;
|
||||
}
|
||||
|
||||
void e2d::Text::setItalic(bool value)
|
||||
{
|
||||
_TextStyle.italic = value;
|
||||
_style.italic = value;
|
||||
_reset();
|
||||
}
|
||||
|
||||
void e2d::Text::setWrapping(bool wrapping)
|
||||
{
|
||||
if (_TextStyle.wrapping != wrapping)
|
||||
if (_style.wrapping != wrapping)
|
||||
{
|
||||
_TextStyle.wrapping = wrapping;
|
||||
_style.wrapping = wrapping;
|
||||
_reset();
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::Text::setWrappingWidth(double fWrappingWidth)
|
||||
{
|
||||
if (_TextStyle.wrappingWidth != fWrappingWidth)
|
||||
if (_style.wrappingWidth != fWrappingWidth)
|
||||
{
|
||||
_TextStyle.wrappingWidth = max(fWrappingWidth, 0);
|
||||
_style.wrappingWidth = max(fWrappingWidth, 0);
|
||||
|
||||
if (_TextStyle.wrapping)
|
||||
if (_style.wrapping)
|
||||
{
|
||||
_reset();
|
||||
}
|
||||
|
|
@ -224,28 +224,28 @@ void e2d::Text::setWrappingWidth(double fWrappingWidth)
|
|||
|
||||
void e2d::Text::setLineSpacing(double fLineSpacing)
|
||||
{
|
||||
if (_TextStyle.lineSpacing != fLineSpacing)
|
||||
if (_style.lineSpacing != fLineSpacing)
|
||||
{
|
||||
_TextStyle.lineSpacing = fLineSpacing;
|
||||
_style.lineSpacing = fLineSpacing;
|
||||
_reset();
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::Text::setAlignment(TextAlign align)
|
||||
{
|
||||
if (_TextStyle.alignment != align)
|
||||
if (_style.alignment != align)
|
||||
{
|
||||
_TextStyle.alignment = align;
|
||||
_style.alignment = align;
|
||||
_reset();
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::Text::setUnderline(bool hasUnderline)
|
||||
{
|
||||
if (_TextStyle.hasUnderline != hasUnderline)
|
||||
if (_style.hasUnderline != hasUnderline)
|
||||
{
|
||||
_TextStyle.hasUnderline = hasUnderline;
|
||||
if (!_pDWriteTextFormat)
|
||||
_style.hasUnderline = hasUnderline;
|
||||
if (!_textFormat)
|
||||
_createFormat();
|
||||
_createLayout();
|
||||
}
|
||||
|
|
@ -253,10 +253,10 @@ void e2d::Text::setUnderline(bool hasUnderline)
|
|||
|
||||
void e2d::Text::setStrikethrough(bool hasStrikethrough)
|
||||
{
|
||||
if (_TextStyle.hasStrikethrough != hasStrikethrough)
|
||||
if (_style.hasStrikethrough != hasStrikethrough)
|
||||
{
|
||||
_TextStyle.hasStrikethrough = hasStrikethrough;
|
||||
if (!_pDWriteTextFormat)
|
||||
_style.hasStrikethrough = hasStrikethrough;
|
||||
if (!_textFormat)
|
||||
_createFormat();
|
||||
_createLayout();
|
||||
}
|
||||
|
|
@ -264,42 +264,42 @@ void e2d::Text::setStrikethrough(bool hasStrikethrough)
|
|||
|
||||
void e2d::Text::setOutline(bool hasOutline)
|
||||
{
|
||||
_TextStyle.hasOutline = hasOutline;
|
||||
_style.hasOutline = hasOutline;
|
||||
}
|
||||
|
||||
void e2d::Text::setOutlineColor(Color outlineColor)
|
||||
{
|
||||
_TextStyle.outlineColor = outlineColor;
|
||||
_style.outlineColor = outlineColor;
|
||||
}
|
||||
|
||||
void e2d::Text::setOutlineWidth(double outlineWidth)
|
||||
{
|
||||
_TextStyle.outlineWidth = outlineWidth;
|
||||
_style.outlineWidth = outlineWidth;
|
||||
}
|
||||
|
||||
void e2d::Text::setOutlineJoin(LineJoin outlineJoin)
|
||||
{
|
||||
_TextStyle.outlineJoin = outlineJoin;
|
||||
_style.outlineJoin = outlineJoin;
|
||||
}
|
||||
|
||||
void e2d::Text::onRender()
|
||||
{
|
||||
if (_pDWriteTextLayout)
|
||||
if (_textLayout)
|
||||
{
|
||||
// 创建文本区域
|
||||
D2D1_RECT_F textLayoutRect = D2D1::RectF(0, 0, _fWidth, _fHeight);
|
||||
D2D1_RECT_F textLayoutRect = D2D1::RectF(0, 0, _width, _height);
|
||||
// 设置画刷颜色和透明度
|
||||
Renderer::getSolidColorBrush()->SetOpacity(_fDisplayOpacity);
|
||||
Renderer::getSolidColorBrush()->SetOpacity(_displayOpacity);
|
||||
// 获取文本渲染器
|
||||
auto pTextRenderer = Renderer::getCustomTextRenderer();
|
||||
pTextRenderer->SetTextStyle(
|
||||
_TextStyle.color.toColorF(),
|
||||
_TextStyle.hasOutline,
|
||||
_TextStyle.outlineColor.toColorF(),
|
||||
static_cast<FLOAT>(_TextStyle.outlineWidth),
|
||||
D2D1_LINE_JOIN(_TextStyle.outlineJoin)
|
||||
_style.color.toColorF(),
|
||||
_style.hasOutline,
|
||||
_style.outlineColor.toColorF(),
|
||||
float(_style.outlineWidth),
|
||||
D2D1_LINE_JOIN(_style.outlineJoin)
|
||||
);
|
||||
_pDWriteTextLayout->Draw(NULL, pTextRenderer, 0, 0);
|
||||
_textLayout->Draw(NULL, pTextRenderer, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -313,105 +313,105 @@ void e2d::Text::_reset()
|
|||
|
||||
void e2d::Text::_createFormat()
|
||||
{
|
||||
SafeReleaseInterface(&_pDWriteTextFormat);
|
||||
SafeReleaseInterface(&_textFormat);
|
||||
|
||||
HRESULT hr = Renderer::getIDWriteFactory()->CreateTextFormat(
|
||||
_TextStyle.fontFamily,
|
||||
_style.fontFamily,
|
||||
NULL,
|
||||
DWRITE_FONT_WEIGHT(_TextStyle.fontWeight),
|
||||
_TextStyle.italic ? DWRITE_FONT_STYLE_ITALIC : DWRITE_FONT_STYLE_NORMAL,
|
||||
DWRITE_FONT_WEIGHT(_style.fontWeight),
|
||||
_style.italic ? DWRITE_FONT_STYLE_ITALIC : DWRITE_FONT_STYLE_NORMAL,
|
||||
DWRITE_FONT_STRETCH_NORMAL,
|
||||
static_cast<float>(_TextStyle.fontSize),
|
||||
float(_style.fontSize),
|
||||
L"",
|
||||
&_pDWriteTextFormat
|
||||
&_textFormat
|
||||
);
|
||||
|
||||
ASSERT(SUCCEEDED(hr), "Create IDWriteTextFormat Failed!");
|
||||
|
||||
if (_pDWriteTextFormat)
|
||||
if (_textFormat)
|
||||
{
|
||||
// 设置文字对齐方式
|
||||
_pDWriteTextFormat->SetTextAlignment(DWRITE_TEXT_ALIGNMENT(_TextStyle.alignment));
|
||||
_textFormat->SetTextAlignment(DWRITE_TEXT_ALIGNMENT(_style.alignment));
|
||||
// 设置行间距
|
||||
if (_TextStyle.lineSpacing == 0.0)
|
||||
if (_style.lineSpacing == 0.0)
|
||||
{
|
||||
_pDWriteTextFormat->SetLineSpacing(DWRITE_LINE_SPACING_METHOD_DEFAULT, 0, 0);
|
||||
_textFormat->SetLineSpacing(DWRITE_LINE_SPACING_METHOD_DEFAULT, 0, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
_pDWriteTextFormat->SetLineSpacing(
|
||||
_textFormat->SetLineSpacing(
|
||||
DWRITE_LINE_SPACING_METHOD_UNIFORM,
|
||||
static_cast<FLOAT>(_TextStyle.lineSpacing),
|
||||
static_cast<FLOAT>(_TextStyle.lineSpacing) * 0.8f
|
||||
float(_style.lineSpacing),
|
||||
float(_style.lineSpacing) * 0.8f
|
||||
);
|
||||
}
|
||||
// 打开文本自动换行时,设置换行属性
|
||||
if (_TextStyle.wrapping)
|
||||
if (_style.wrapping)
|
||||
{
|
||||
_pDWriteTextFormat->SetWordWrapping(DWRITE_WORD_WRAPPING_WRAP);
|
||||
_textFormat->SetWordWrapping(DWRITE_WORD_WRAPPING_WRAP);
|
||||
}
|
||||
else
|
||||
{
|
||||
_pDWriteTextFormat->SetWordWrapping(DWRITE_WORD_WRAPPING_NO_WRAP);
|
||||
_textFormat->SetWordWrapping(DWRITE_WORD_WRAPPING_NO_WRAP);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::Text::_createLayout()
|
||||
{
|
||||
SafeReleaseInterface(&_pDWriteTextLayout);
|
||||
SafeReleaseInterface(&_textLayout);
|
||||
|
||||
// 文本为空字符串时,重置属性
|
||||
if (_sText.isEmpty())
|
||||
if (_text.isEmpty())
|
||||
{
|
||||
this->setSize(0, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
if (_pDWriteTextFormat == nullptr)
|
||||
if (_textFormat == nullptr)
|
||||
{
|
||||
WARN_IF(true, "Text::_createLayout failed! _pDWriteTextFormat NULL pointer exception.");
|
||||
WARN_IF(true, "Text::_createLayout failed! _textFormat NULL pointer exception.");
|
||||
return;
|
||||
}
|
||||
|
||||
UINT32 length = static_cast<UINT32>(_sText.getLength());
|
||||
UINT32 length = UINT32(_text.getLength());
|
||||
|
||||
// 创建 TextLayout
|
||||
HRESULT hr;
|
||||
// 对文本自动换行情况下进行处理
|
||||
if (_TextStyle.wrapping)
|
||||
if (_style.wrapping)
|
||||
{
|
||||
hr = Renderer::getIDWriteFactory()->CreateTextLayout(
|
||||
_sText,
|
||||
_text,
|
||||
length,
|
||||
_pDWriteTextFormat,
|
||||
static_cast<FLOAT>(_TextStyle.wrappingWidth),
|
||||
_textFormat,
|
||||
float(_style.wrappingWidth),
|
||||
0,
|
||||
&_pDWriteTextLayout
|
||||
&_textLayout
|
||||
);
|
||||
if (_pDWriteTextLayout)
|
||||
if (_textLayout)
|
||||
{
|
||||
// 获取文本布局的宽度和高度
|
||||
DWRITE_TEXT_METRICS metrics;
|
||||
_pDWriteTextLayout->GetMetrics(&metrics);
|
||||
_textLayout->GetMetrics(&metrics);
|
||||
// 重设文本宽高
|
||||
this->setSize(metrics.layoutWidth, metrics.height);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
hr = Renderer::getIDWriteFactory()->CreateTextLayout(_sText, length, _pDWriteTextFormat, 0, 0, &_pDWriteTextLayout);
|
||||
hr = Renderer::getIDWriteFactory()->CreateTextLayout(_text, length, _textFormat, 0, 0, &_textLayout);
|
||||
// 为防止文本对齐问题,根据刚才创建的 layout 宽度重新创建它
|
||||
if (_pDWriteTextLayout)
|
||||
if (_textLayout)
|
||||
{
|
||||
// 获取文本布局的宽度和高度
|
||||
DWRITE_TEXT_METRICS metrics;
|
||||
_pDWriteTextLayout->GetMetrics(&metrics);
|
||||
_textLayout->GetMetrics(&metrics);
|
||||
// 重设文本宽高
|
||||
this->setSize(metrics.width, metrics.height);
|
||||
// 重新创建 layout
|
||||
SafeReleaseInterface(&_pDWriteTextLayout);
|
||||
hr = Renderer::getIDWriteFactory()->CreateTextLayout(_sText, length, _pDWriteTextFormat, _fWidth, 0, &_pDWriteTextLayout);
|
||||
SafeReleaseInterface(&_textLayout);
|
||||
hr = Renderer::getIDWriteFactory()->CreateTextLayout(_text, length, _textFormat, _width, 0, &_textLayout);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -419,12 +419,12 @@ void e2d::Text::_createLayout()
|
|||
|
||||
// 添加下划线和删除线
|
||||
DWRITE_TEXT_RANGE range = { 0, length };
|
||||
if (_TextStyle.hasUnderline)
|
||||
if (_style.hasUnderline)
|
||||
{
|
||||
_pDWriteTextLayout->SetUnderline(true, range);
|
||||
_textLayout->SetUnderline(true, range);
|
||||
}
|
||||
if (_TextStyle.hasStrikethrough)
|
||||
if (_style.hasStrikethrough)
|
||||
{
|
||||
_pDWriteTextLayout->SetStrikethrough(true, range);
|
||||
_textLayout->SetStrikethrough(true, range);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -762,7 +762,7 @@ double e2d::Music::getVolume()
|
|||
|
||||
void e2d::Music::setVolume(double fVolume)
|
||||
{
|
||||
s_fMusicVolume = min(max(static_cast<float>(fVolume), -224), 224);
|
||||
s_fMusicVolume = min(max(float(fVolume), -224), 224);
|
||||
for (auto pair : GetMusicFileList())
|
||||
{
|
||||
pair.second->setVolume(s_fMusicVolume);
|
||||
|
|
|
|||
|
|
@ -1,21 +1,135 @@
|
|||
#include "..\e2dbase.h"
|
||||
#include "..\e2dtransition.h"
|
||||
#include "..\e2dnode.h"
|
||||
|
||||
e2d::TransitionFade * e2d::Transition::Fade(double duration)
|
||||
e2d::Transition::Transition(double duration)
|
||||
: _end(false)
|
||||
, _last(0)
|
||||
, _delta(0)
|
||||
, _outScene(nullptr)
|
||||
, _inScene(nullptr)
|
||||
, _outLayer(nullptr)
|
||||
, _inLayer(nullptr)
|
||||
, _outLayerParam()
|
||||
, _inLayerParam()
|
||||
{
|
||||
return new (std::nothrow) TransitionFade(duration);
|
||||
_duration = max(duration, 0);
|
||||
}
|
||||
|
||||
e2d::TransitionFade * e2d::Transition::Fade(double fadeOutDuration, double fadeInDuration)
|
||||
e2d::Transition::~Transition()
|
||||
{
|
||||
return new (std::nothrow) TransitionFade(fadeOutDuration, fadeInDuration);
|
||||
SafeReleaseInterface(&_outLayer);
|
||||
SafeReleaseInterface(&_inLayer);
|
||||
}
|
||||
|
||||
e2d::TransitionEmerge * e2d::Transition::Emerge(double duration)
|
||||
bool e2d::Transition::isDone()
|
||||
{
|
||||
return new (std::nothrow) TransitionEmerge(duration);
|
||||
return _end;
|
||||
}
|
||||
|
||||
e2d::TransitionMove * e2d::Transition::Move(double duration, Direct direct)
|
||||
void e2d::Transition::onDestroy()
|
||||
{
|
||||
return new (std::nothrow) TransitionMove(duration, direct);
|
||||
SafeRelease(&_outScene);
|
||||
SafeRelease(&_inScene);
|
||||
}
|
||||
|
||||
void e2d::Transition::_init(Scene * prev, Scene * next)
|
||||
{
|
||||
// 创建图层
|
||||
HRESULT hr = Renderer::getRenderTarget()->CreateLayer(&_inLayer);
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
hr = Renderer::getRenderTarget()->CreateLayer(&_outLayer);
|
||||
}
|
||||
|
||||
if (FAILED(hr))
|
||||
{
|
||||
ASSERT(false, "Create layer failed!");
|
||||
}
|
||||
|
||||
_last = Time::getTotalTime();
|
||||
_outScene = prev;
|
||||
_inScene = next;
|
||||
if (_outScene) _outScene->retain();
|
||||
if (_inScene) _inScene->retain();
|
||||
|
||||
_windowSize = Window::getSize();
|
||||
_outLayerParam = _inLayerParam = D2D1::LayerParameters();
|
||||
}
|
||||
|
||||
void e2d::Transition::_update()
|
||||
{
|
||||
// 计算动画进度
|
||||
if (_duration == 0)
|
||||
{
|
||||
_delta = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
_delta = min((Time::getTotalTime() - _last) / _duration, 1);
|
||||
}
|
||||
|
||||
this->_updateCustom();
|
||||
|
||||
// 更新场景内容
|
||||
if (_outScene)
|
||||
{
|
||||
_outScene->_update();
|
||||
}
|
||||
if (_inScene)
|
||||
{
|
||||
_inScene->_update();
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::Transition::_render()
|
||||
{
|
||||
auto pRT = Renderer::getRenderTarget();
|
||||
|
||||
if (_outScene)
|
||||
{
|
||||
Point rootPos = _outScene->getRoot()->getPos();
|
||||
auto clipRect = D2D1::RectF(
|
||||
float(max(rootPos.x, 0)),
|
||||
float(max(rootPos.y, 0)),
|
||||
float(min(rootPos.x + _windowSize.width, _windowSize.width)),
|
||||
float(min(rootPos.y + _windowSize.height, _windowSize.height))
|
||||
);
|
||||
pRT->SetTransform(D2D1::Matrix3x2F::Identity());
|
||||
pRT->PushAxisAlignedClip(clipRect, D2D1_ANTIALIAS_MODE_PER_PRIMITIVE);
|
||||
pRT->PushLayer(_outLayerParam, _outLayer);
|
||||
|
||||
// 渲染场景
|
||||
_outScene->_render();
|
||||
|
||||
pRT->PopLayer();
|
||||
pRT->PopAxisAlignedClip();
|
||||
}
|
||||
|
||||
if (_inScene)
|
||||
{
|
||||
Point rootPos = _inScene->getRoot()->getPos();
|
||||
auto clipRect = D2D1::RectF(
|
||||
float(max(rootPos.x, 0)),
|
||||
float(max(rootPos.y, 0)),
|
||||
float(min(rootPos.x + _windowSize.width, _windowSize.width)),
|
||||
float(min(rootPos.y + _windowSize.height, _windowSize.height))
|
||||
);
|
||||
pRT->SetTransform(D2D1::Matrix3x2F::Identity());
|
||||
pRT->PushAxisAlignedClip(clipRect, D2D1_ANTIALIAS_MODE_PER_PRIMITIVE);
|
||||
pRT->PushLayer(_inLayerParam, _inLayer);
|
||||
|
||||
// 渲染场景
|
||||
_inScene->_render();
|
||||
|
||||
pRT->PopLayer();
|
||||
pRT->PopAxisAlignedClip();
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::Transition::_stop()
|
||||
{
|
||||
_end = true;
|
||||
_reset();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,135 +0,0 @@
|
|||
#include "..\e2dbase.h"
|
||||
#include "..\e2dtransition.h"
|
||||
#include "..\e2dnode.h"
|
||||
|
||||
e2d::TransitionBase::TransitionBase(double duration)
|
||||
: _bEnd(false)
|
||||
, _fLast(0)
|
||||
, _delta(0)
|
||||
, _pPrevScene(nullptr)
|
||||
, _pNextScene(nullptr)
|
||||
, _pPrevLayer(nullptr)
|
||||
, _pNextLayer(nullptr)
|
||||
, _sPrevLayerParam()
|
||||
, _sNextLayerParam()
|
||||
{
|
||||
_duration = max(duration, 0);
|
||||
}
|
||||
|
||||
e2d::TransitionBase::~TransitionBase()
|
||||
{
|
||||
SafeReleaseInterface(&_pPrevLayer);
|
||||
SafeReleaseInterface(&_pNextLayer);
|
||||
}
|
||||
|
||||
bool e2d::TransitionBase::isDone()
|
||||
{
|
||||
return _bEnd;
|
||||
}
|
||||
|
||||
void e2d::TransitionBase::onDestroy()
|
||||
{
|
||||
SafeRelease(&_pPrevScene);
|
||||
SafeRelease(&_pNextScene);
|
||||
}
|
||||
|
||||
void e2d::TransitionBase::_init(Scene * prev, Scene * next)
|
||||
{
|
||||
// 创建图层
|
||||
HRESULT hr = Renderer::getRenderTarget()->CreateLayer(&_pNextLayer);
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
hr = Renderer::getRenderTarget()->CreateLayer(&_pPrevLayer);
|
||||
}
|
||||
|
||||
if (FAILED(hr))
|
||||
{
|
||||
ASSERT(false, "Create layer failed!");
|
||||
}
|
||||
|
||||
_fLast = Time::getTotalTime();
|
||||
_pPrevScene = prev;
|
||||
_pNextScene = next;
|
||||
if (_pPrevScene) _pPrevScene->retain();
|
||||
if (_pNextScene) _pNextScene->retain();
|
||||
|
||||
_WindowSize = Window::getSize();
|
||||
_sPrevLayerParam = _sNextLayerParam = D2D1::LayerParameters();
|
||||
}
|
||||
|
||||
void e2d::TransitionBase::_update()
|
||||
{
|
||||
// 计算动画进度
|
||||
if (_duration == 0)
|
||||
{
|
||||
_delta = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
_delta = min((Time::getTotalTime() - _fLast) / _duration, 1);
|
||||
}
|
||||
|
||||
this->_updateCustom();
|
||||
|
||||
// 更新场景内容
|
||||
if (_pPrevScene)
|
||||
{
|
||||
_pPrevScene->_update();
|
||||
}
|
||||
if (_pNextScene)
|
||||
{
|
||||
_pNextScene->_update();
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::TransitionBase::_render()
|
||||
{
|
||||
auto pRT = Renderer::getRenderTarget();
|
||||
|
||||
if (_pPrevScene)
|
||||
{
|
||||
Point rootPos = _pPrevScene->getRoot()->getPos();
|
||||
auto clipRect = D2D1::RectF(
|
||||
float(max(rootPos.x, 0)),
|
||||
float(max(rootPos.y, 0)),
|
||||
float(min(rootPos.x + _WindowSize.width, _WindowSize.width)),
|
||||
float(min(rootPos.y + _WindowSize.height, _WindowSize.height))
|
||||
);
|
||||
pRT->SetTransform(D2D1::Matrix3x2F::Identity());
|
||||
pRT->PushAxisAlignedClip(clipRect, D2D1_ANTIALIAS_MODE_PER_PRIMITIVE);
|
||||
pRT->PushLayer(_sPrevLayerParam, _pPrevLayer);
|
||||
|
||||
// 渲染场景
|
||||
_pPrevScene->_render();
|
||||
|
||||
pRT->PopLayer();
|
||||
pRT->PopAxisAlignedClip();
|
||||
}
|
||||
|
||||
if (_pNextScene)
|
||||
{
|
||||
Point rootPos = _pNextScene->getRoot()->getPos();
|
||||
auto clipRect = D2D1::RectF(
|
||||
float(max(rootPos.x, 0)),
|
||||
float(max(rootPos.y, 0)),
|
||||
float(min(rootPos.x + _WindowSize.width, _WindowSize.width)),
|
||||
float(min(rootPos.y + _WindowSize.height, _WindowSize.height))
|
||||
);
|
||||
pRT->SetTransform(D2D1::Matrix3x2F::Identity());
|
||||
pRT->PushAxisAlignedClip(clipRect, D2D1_ANTIALIAS_MODE_PER_PRIMITIVE);
|
||||
pRT->PushLayer(_sNextLayerParam, _pNextLayer);
|
||||
|
||||
// 渲染场景
|
||||
_pNextScene->_render();
|
||||
|
||||
pRT->PopLayer();
|
||||
pRT->PopAxisAlignedClip();
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::TransitionBase::_stop()
|
||||
{
|
||||
_bEnd = true;
|
||||
_reset();
|
||||
}
|
||||
|
|
@ -2,21 +2,21 @@
|
|||
#include "..\e2dnode.h"
|
||||
|
||||
e2d::TransitionEmerge::TransitionEmerge(double duration)
|
||||
: TransitionBase(duration)
|
||||
: Transition(duration)
|
||||
{
|
||||
}
|
||||
|
||||
void e2d::TransitionEmerge::_init(Scene * prev, Scene * next)
|
||||
{
|
||||
TransitionBase::_init(prev, next);
|
||||
_sPrevLayerParam.opacity = 1;
|
||||
_sNextLayerParam.opacity = 0;
|
||||
Transition::_init(prev, next);
|
||||
_outLayerParam.opacity = 1;
|
||||
_inLayerParam.opacity = 0;
|
||||
}
|
||||
|
||||
void e2d::TransitionEmerge::_updateCustom()
|
||||
{
|
||||
_sPrevLayerParam.opacity = float(1 - _delta);
|
||||
_sNextLayerParam.opacity = float(_delta);
|
||||
_outLayerParam.opacity = float(1 - _delta);
|
||||
_inLayerParam.opacity = float(_delta);
|
||||
|
||||
if (_delta >= 1)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -2,53 +2,53 @@
|
|||
#include "..\e2dnode.h"
|
||||
|
||||
e2d::TransitionFade::TransitionFade(double duration)
|
||||
: TransitionBase(0)
|
||||
, _fFadeOutDuration(max(duration / 2, 0))
|
||||
, _fFadeInDuration(max(duration / 2, 0))
|
||||
, _bFadeOutTransioning(true)
|
||||
: Transition(0)
|
||||
, _fadeOutDuration(max(duration / 2, 0))
|
||||
, _fadeInDuration(max(duration / 2, 0))
|
||||
, _fadeOutTransioning(true)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::TransitionFade::TransitionFade(double fadeOutDuration, double fadeInDuration)
|
||||
: TransitionBase(0)
|
||||
, _fFadeOutDuration(max(fadeOutDuration, 0))
|
||||
, _fFadeInDuration(max(fadeInDuration, 0))
|
||||
, _bFadeOutTransioning(true)
|
||||
: Transition(0)
|
||||
, _fadeOutDuration(max(fadeOutDuration, 0))
|
||||
, _fadeInDuration(max(fadeInDuration, 0))
|
||||
, _fadeOutTransioning(true)
|
||||
{
|
||||
}
|
||||
|
||||
void e2d::TransitionFade::_init(Scene * prev, Scene * next)
|
||||
{
|
||||
TransitionBase::_init(prev, next);
|
||||
if (_pPrevScene)
|
||||
Transition::_init(prev, next);
|
||||
if (_outScene)
|
||||
{
|
||||
_bFadeOutTransioning = true;
|
||||
_duration = _fFadeOutDuration;
|
||||
_fadeOutTransioning = true;
|
||||
_duration = _fadeOutDuration;
|
||||
}
|
||||
else
|
||||
{
|
||||
_bFadeOutTransioning = false;
|
||||
_duration = _fFadeInDuration;
|
||||
_fadeOutTransioning = false;
|
||||
_duration = _fadeInDuration;
|
||||
}
|
||||
_sPrevLayerParam.opacity = 1;
|
||||
_sNextLayerParam.opacity = 0;
|
||||
_outLayerParam.opacity = 1;
|
||||
_inLayerParam.opacity = 0;
|
||||
}
|
||||
|
||||
void e2d::TransitionFade::_updateCustom()
|
||||
{
|
||||
if (_bFadeOutTransioning)
|
||||
if (_fadeOutTransioning)
|
||||
{
|
||||
_sPrevLayerParam.opacity = float(1 - _delta);
|
||||
_outLayerParam.opacity = float(1 - _delta);
|
||||
if (_delta >= 1)
|
||||
{
|
||||
_bFadeOutTransioning = false;
|
||||
_duration = _fFadeInDuration;
|
||||
_fLast = Time::getTotalTime();
|
||||
_fadeOutTransioning = false;
|
||||
_duration = _fadeInDuration;
|
||||
_last = Time::getTotalTime();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
_sNextLayerParam.opacity = float(_delta);
|
||||
_inLayerParam.opacity = float(_delta);
|
||||
if (_delta >= 1)
|
||||
{
|
||||
this->_stop();
|
||||
|
|
|
|||
|
|
@ -1,52 +1,52 @@
|
|||
#include "..\e2dtransition.h"
|
||||
#include "..\e2dnode.h"
|
||||
|
||||
e2d::TransitionMove::TransitionMove(double duration, Direct direct)
|
||||
: TransitionBase(duration)
|
||||
, _Direct(direct)
|
||||
e2d::TransitionMove::TransitionMove(double duration, Direction direction)
|
||||
: Transition(duration)
|
||||
, _direction(direction)
|
||||
{
|
||||
}
|
||||
|
||||
void e2d::TransitionMove::_init(Scene * prev, Scene * next)
|
||||
{
|
||||
TransitionBase::_init(prev, next);
|
||||
Transition::_init(prev, next);
|
||||
|
||||
double width = _WindowSize.width;
|
||||
double height = _WindowSize.height;
|
||||
if (_Direct == Direct::UP)
|
||||
double width = _windowSize.width;
|
||||
double height = _windowSize.height;
|
||||
if (_direction == Direction::UP)
|
||||
{
|
||||
_Vector = Vector(0, -height);
|
||||
_NextPos = Point(0, height);
|
||||
_posDelta = Vector(0, -height);
|
||||
_startPos = Point(0, height);
|
||||
}
|
||||
else if (_Direct == Direct::DOWN)
|
||||
else if (_direction == Direction::DOWN)
|
||||
{
|
||||
_Vector = Vector(0, height);
|
||||
_NextPos = Point(0, -height);
|
||||
_posDelta = Vector(0, height);
|
||||
_startPos = Point(0, -height);
|
||||
}
|
||||
else if (_Direct == Direct::LEFT)
|
||||
else if (_direction == Direction::LEFT)
|
||||
{
|
||||
_Vector = Vector(-width, 0);
|
||||
_NextPos = Point(width, 0);
|
||||
_posDelta = Vector(-width, 0);
|
||||
_startPos = Point(width, 0);
|
||||
}
|
||||
else if (_Direct == Direct::RIGHT)
|
||||
else if (_direction == Direction::RIGHT)
|
||||
{
|
||||
_Vector = Vector(width, 0);
|
||||
_NextPos = Point(-width, 0);
|
||||
_posDelta = Vector(width, 0);
|
||||
_startPos = Point(-width, 0);
|
||||
}
|
||||
|
||||
if (_pPrevScene) _pPrevScene->getRoot()->setPos(0, 0);
|
||||
_pNextScene->getRoot()->setPos(_NextPos);
|
||||
if (_outScene) _outScene->getRoot()->setPos(0, 0);
|
||||
_inScene->getRoot()->setPos(_startPos);
|
||||
}
|
||||
|
||||
void e2d::TransitionMove::_updateCustom()
|
||||
{
|
||||
if (_pPrevScene)
|
||||
if (_outScene)
|
||||
{
|
||||
_pPrevScene->getRoot()->setPos(_Vector * _delta);
|
||||
_outScene->getRoot()->setPos(_posDelta * _delta);
|
||||
}
|
||||
if (_pNextScene)
|
||||
if (_inScene)
|
||||
{
|
||||
_pNextScene->getRoot()->setPos(_NextPos + _Vector * _delta);
|
||||
_inScene->getRoot()->setPos(_startPos + _posDelta * _delta);
|
||||
}
|
||||
|
||||
if (_delta >= 1)
|
||||
|
|
@ -57,7 +57,7 @@ void e2d::TransitionMove::_updateCustom()
|
|||
|
||||
void e2d::TransitionMove::_reset()
|
||||
{
|
||||
if (_pPrevScene) _pPrevScene->getRoot()->setPos(0, 0);
|
||||
_pNextScene->getRoot()->setPos(0, 0);
|
||||
if (_outScene) _outScene->getRoot()->setPos(0, 0);
|
||||
_inScene->getRoot()->setPos(0, 0);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -84,7 +84,7 @@ protected:
|
|||
bool _done;
|
||||
bool _initialized;
|
||||
Node * _target;
|
||||
double _fLast;
|
||||
double _last;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -65,12 +65,12 @@ protected:
|
|||
virtual void _render();
|
||||
|
||||
protected:
|
||||
bool _bEnable;
|
||||
bool _bIsVisiable;
|
||||
bool _bAutoResize;
|
||||
Color _nColor;
|
||||
Node * _pParentNode;
|
||||
ID2D1TransformedGeometry * _pTransformedGeometry;
|
||||
bool _enable;
|
||||
bool _visiable;
|
||||
bool _autoResize;
|
||||
Color _color;
|
||||
Node * _parentNode;
|
||||
ID2D1TransformedGeometry * _transformed;
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -113,7 +113,7 @@ protected:
|
|||
virtual void _resize();
|
||||
|
||||
protected:
|
||||
ID2D1RectangleGeometry * _pD2dRectangle;
|
||||
ID2D1RectangleGeometry * _d2dRectangle;
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -152,7 +152,7 @@ protected:
|
|||
virtual void _resize();
|
||||
|
||||
protected:
|
||||
ID2D1EllipseGeometry * _pD2dCircle;
|
||||
ID2D1EllipseGeometry * _d2dCircle;
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -193,7 +193,7 @@ protected:
|
|||
virtual void _resize();
|
||||
|
||||
protected:
|
||||
ID2D1EllipseGeometry * _pD2dEllipse;
|
||||
ID2D1EllipseGeometry * _d2dEllipse;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
@ -11,15 +11,16 @@ namespace e2d
|
|||
{
|
||||
|
||||
|
||||
struct Size;
|
||||
class Size;
|
||||
|
||||
// 表示坐标的结构体
|
||||
struct Point
|
||||
class Point
|
||||
{
|
||||
public:
|
||||
double x; // X 坐标
|
||||
double y; // Y 坐标
|
||||
|
||||
/* 构造函数 */
|
||||
public:
|
||||
Point();
|
||||
|
||||
Point(double x, double y);
|
||||
|
|
@ -37,12 +38,13 @@ struct Point
|
|||
typedef Point Vector;
|
||||
|
||||
// 表示大小的结构体
|
||||
struct Size
|
||||
class Size
|
||||
{
|
||||
public:
|
||||
double width; // 宽度
|
||||
double height; // 高度
|
||||
|
||||
/* 构造函数 */
|
||||
public:
|
||||
Size();
|
||||
|
||||
Size(double width, double height);
|
||||
|
|
@ -311,7 +313,7 @@ protected:
|
|||
double alpha
|
||||
);
|
||||
|
||||
protected:
|
||||
public:
|
||||
float r;
|
||||
float g;
|
||||
float b;
|
||||
|
|
@ -429,7 +431,7 @@ enum class Cursor : int
|
|||
|
||||
|
||||
// 方向
|
||||
enum class Direct : int
|
||||
enum class Direction : int
|
||||
{
|
||||
UP, /* 上 */
|
||||
DOWN, /* 下 */
|
||||
|
|
@ -477,8 +479,9 @@ enum class ColliderType : int
|
|||
|
||||
|
||||
// 文本样式
|
||||
struct TextStyle
|
||||
class TextStyle
|
||||
{
|
||||
public:
|
||||
String fontFamily; // 字体
|
||||
double fontSize; // 字号
|
||||
Color color; // 颜色
|
||||
|
|
@ -495,7 +498,7 @@ struct TextStyle
|
|||
double outlineWidth; // 描边线宽
|
||||
LineJoin outlineJoin; // 描边线相交样式
|
||||
|
||||
/* 构造函数 */
|
||||
public:
|
||||
TextStyle();
|
||||
|
||||
TextStyle(
|
||||
|
|
@ -593,7 +596,7 @@ public:
|
|||
virtual void onDestroy() {}
|
||||
|
||||
private:
|
||||
int _nRefCount;
|
||||
int _refCount;
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -701,24 +704,24 @@ public:
|
|||
static void clearCache();
|
||||
|
||||
protected:
|
||||
double _fSourceCropX;
|
||||
double _fSourceCropY;
|
||||
double _fSourceCropWidth;
|
||||
double _fSourceCropHeight;
|
||||
ID2D1Bitmap * _pBitmap;
|
||||
double _cropX;
|
||||
double _cropY;
|
||||
double _cropWidth;
|
||||
double _cropHeight;
|
||||
ID2D1Bitmap * _bitmap;
|
||||
};
|
||||
|
||||
|
||||
class Node;
|
||||
class SceneManager;
|
||||
class TransitionBase;
|
||||
class Transition;
|
||||
|
||||
// 场景
|
||||
class Scene :
|
||||
public Object
|
||||
{
|
||||
friend SceneManager;
|
||||
friend TransitionBase;
|
||||
friend Transition;
|
||||
|
||||
public:
|
||||
Scene();
|
||||
|
|
@ -799,11 +802,9 @@ protected:
|
|||
void _update();
|
||||
|
||||
protected:
|
||||
bool _bAutoUpdate;
|
||||
bool _bSortNeeded;
|
||||
bool _bWillSave;
|
||||
bool _bColliderVisiable;
|
||||
Node * _pRoot;
|
||||
bool _autoUpdate;
|
||||
bool _colliderVisiable;
|
||||
Node * _root;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ class Timer;
|
|||
class Action;
|
||||
class Music;
|
||||
class Collider;
|
||||
class TransitionBase;
|
||||
class Transition;
|
||||
|
||||
// 对象管理器
|
||||
class ObjectManager
|
||||
|
|
@ -49,13 +49,13 @@ public:
|
|||
// 切换场景
|
||||
static void enter(
|
||||
Scene * scene, /* 下一个场景的指针 */
|
||||
TransitionBase * transition = nullptr, /* 场景切换动画 */
|
||||
Transition * transition = nullptr, /* 场景切换动画 */
|
||||
bool saveCurrentScene = true /* 是否保存当前场景 */
|
||||
);
|
||||
|
||||
// 返回上一场景
|
||||
static void back(
|
||||
TransitionBase * transition = nullptr /* 场景切换动画 */
|
||||
Transition * transition = nullptr /* 场景切换动画 */
|
||||
);
|
||||
|
||||
// 清空保存的所有场景
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ namespace e2d
|
|||
|
||||
|
||||
class Action;
|
||||
class TransitionBase;
|
||||
class Transition;
|
||||
class Collider;
|
||||
class ColliderManager;
|
||||
|
||||
|
|
@ -15,7 +15,7 @@ class Node :
|
|||
{
|
||||
friend Scene;
|
||||
friend Collider;
|
||||
friend TransitionBase;
|
||||
friend Transition;
|
||||
friend ColliderManager;
|
||||
|
||||
public:
|
||||
|
|
@ -443,33 +443,33 @@ protected:
|
|||
|
||||
protected:
|
||||
String _name;
|
||||
unsigned _nHashName;
|
||||
float _fPosX;
|
||||
float _fPosY;
|
||||
float _fWidth;
|
||||
float _fHeight;
|
||||
float _fScaleX;
|
||||
float _fScaleY;
|
||||
float _fRotation;
|
||||
float _fSkewAngleX;
|
||||
float _fSkewAngleY;
|
||||
float _fDisplayOpacity;
|
||||
float _fRealOpacity;
|
||||
float _fPivotX;
|
||||
float _fPivotY;
|
||||
unsigned _hashName;
|
||||
float _posX;
|
||||
float _posY;
|
||||
float _width;
|
||||
float _height;
|
||||
float _scaleX;
|
||||
float _scaleY;
|
||||
float _rotation;
|
||||
float _skewAngleX;
|
||||
float _skewAngleY;
|
||||
float _displayOpacity;
|
||||
float _realOpacity;
|
||||
float _pivotX;
|
||||
float _pivotY;
|
||||
int _nOrder;
|
||||
bool _bVisiable;
|
||||
bool _bAutoUpdate;
|
||||
bool _bSortChildrenNeeded;
|
||||
bool _bTransformNeeded;
|
||||
bool _bPositionFixed;
|
||||
Collider * _pCollider;
|
||||
Scene * _pParentScene;
|
||||
Node * _pParent;
|
||||
D2D1::Matrix3x2F _MatriInitial;
|
||||
D2D1::Matrix3x2F _MatriFinal;
|
||||
std::set<unsigned int> _vColliders;
|
||||
std::vector<Node*> _vChildren;
|
||||
bool _visiable;
|
||||
bool _autoUpdate;
|
||||
bool _needSort;
|
||||
bool _needTransform;
|
||||
bool _positionFixed;
|
||||
Collider * _collider;
|
||||
Scene * _parentScene;
|
||||
Node * _parent;
|
||||
D2D1::Matrix3x2F _initialMatri;
|
||||
D2D1::Matrix3x2F _finalMatri;
|
||||
std::set<unsigned int> _colliders;
|
||||
std::vector<Node*> _children;
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -551,7 +551,7 @@ public:
|
|||
virtual void onDestroy() override;
|
||||
|
||||
protected:
|
||||
Image * _pImage;
|
||||
Image * _image;
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -735,10 +735,10 @@ protected:
|
|||
void _createLayout();
|
||||
|
||||
protected:
|
||||
String _sText;
|
||||
TextStyle _TextStyle;
|
||||
IDWriteTextFormat * _pDWriteTextFormat;
|
||||
IDWriteTextLayout * _pDWriteTextLayout;
|
||||
String _text;
|
||||
TextStyle _style;
|
||||
IDWriteTextFormat * _textFormat;
|
||||
IDWriteTextLayout * _textLayout;
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -829,13 +829,13 @@ protected:
|
|||
virtual void _runCallback();
|
||||
|
||||
protected:
|
||||
Node * _pNormal;
|
||||
Node * _pMouseover;
|
||||
Node * _pSelected;
|
||||
Node * _pDisabled;
|
||||
bool _bEnable;
|
||||
bool _bIsSelected;
|
||||
ButtonState _eBtnState;
|
||||
Node * _normal;
|
||||
Node * _mouseover;
|
||||
Node * _selected;
|
||||
Node * _disabled;
|
||||
bool _enable;
|
||||
bool _isSelected;
|
||||
ButtonState _state;
|
||||
Function _func;
|
||||
};
|
||||
|
||||
|
|
@ -943,15 +943,11 @@ protected:
|
|||
virtual void _runCallback() override;
|
||||
|
||||
protected:
|
||||
Node * _pNormalOn;
|
||||
Node * _pNormalOff;
|
||||
Node * _pMouseoverOn;
|
||||
Node * _pMouseoverOff;
|
||||
Node * _pSelectedOn;
|
||||
Node * _pSelectedOff;
|
||||
Node * _pDisabledOn;
|
||||
Node * _pDisabledOff;
|
||||
bool _bState;
|
||||
Node * _normalOff;
|
||||
Node * _mouseoverOff;
|
||||
Node * _selectedOff;
|
||||
Node * _disabledOff;
|
||||
bool _toggle;
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -998,8 +994,8 @@ public:
|
|||
);
|
||||
|
||||
protected:
|
||||
bool _bEnable;
|
||||
std::vector<Button*> _vButtons;
|
||||
bool _enable;
|
||||
std::vector<Button*> _buttons;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
@ -55,10 +55,10 @@ protected:
|
|||
virtual void _renderFill() = 0;
|
||||
|
||||
protected:
|
||||
ShapeStyle _nStyle;
|
||||
float _fStrokeWidth;
|
||||
Color _nLineColor;
|
||||
Color _nFillColor;
|
||||
ShapeStyle _style;
|
||||
float _strokeWidth;
|
||||
Color _lineColor;
|
||||
Color _fillColor;
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -163,8 +163,8 @@ protected:
|
|||
virtual void _renderFill() override;
|
||||
|
||||
protected:
|
||||
float _fRadiusX;
|
||||
float _fRadiusY;
|
||||
float _radiusX;
|
||||
float _radiusY;
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -208,7 +208,7 @@ protected:
|
|||
virtual void _renderFill() override;
|
||||
|
||||
protected:
|
||||
float _fRadius;
|
||||
float _radius;
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -263,8 +263,8 @@ protected:
|
|||
virtual void _renderFill() override;
|
||||
|
||||
protected:
|
||||
float _fRadiusX;
|
||||
float _fRadiusY;
|
||||
float _radiusX;
|
||||
float _radiusY;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
@ -6,49 +6,18 @@ namespace e2d
|
|||
|
||||
|
||||
class SceneManager;
|
||||
class TransitionEmerge;
|
||||
class TransitionFade;
|
||||
class TransitionMove;
|
||||
|
||||
|
||||
// 场景过渡动画生成器
|
||||
class Transition
|
||||
{
|
||||
public:
|
||||
// 创建淡入淡出式的场景切换动画
|
||||
static TransitionFade * Fade(
|
||||
double duration /* 动画持续时长 */
|
||||
);
|
||||
|
||||
// 创建淡入淡出式的场景切换动画
|
||||
static TransitionFade * Fade(
|
||||
double fadeOutDuration, /* 前一场景淡出动画持续时长 */
|
||||
double fadeInDuration /* 后一场景淡入动画持续时长 */
|
||||
);
|
||||
|
||||
// 创建浮现式的场景切换动画
|
||||
static TransitionEmerge * Emerge(
|
||||
double duration /* 动画持续时长 */
|
||||
);
|
||||
|
||||
// 创建移动式的场景切换动画
|
||||
static TransitionMove * Move(
|
||||
double duration, /* 动画持续时长 */
|
||||
Direct direct = Direct::LEFT /* 场景移动方向 */
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
// 基础过渡动画
|
||||
class TransitionBase :
|
||||
class Transition :
|
||||
public Object
|
||||
{
|
||||
friend SceneManager;
|
||||
|
||||
public:
|
||||
TransitionBase(double duration);
|
||||
Transition(double duration);
|
||||
|
||||
virtual ~TransitionBase();
|
||||
virtual ~Transition();
|
||||
|
||||
// 场景切换动画是否结束
|
||||
bool isDone();
|
||||
|
|
@ -79,22 +48,22 @@ protected:
|
|||
virtual void _stop();
|
||||
|
||||
protected:
|
||||
bool _bEnd;
|
||||
double _fLast;
|
||||
bool _end;
|
||||
double _last;
|
||||
double _duration;
|
||||
double _delta;
|
||||
Size _WindowSize;
|
||||
Scene * _pPrevScene;
|
||||
Scene * _pNextScene;
|
||||
ID2D1Layer * _pPrevLayer;
|
||||
ID2D1Layer * _pNextLayer;
|
||||
D2D1_LAYER_PARAMETERS _sPrevLayerParam;
|
||||
D2D1_LAYER_PARAMETERS _sNextLayerParam;
|
||||
Size _windowSize;
|
||||
Scene * _outScene;
|
||||
Scene * _inScene;
|
||||
ID2D1Layer * _outLayer;
|
||||
ID2D1Layer * _inLayer;
|
||||
D2D1_LAYER_PARAMETERS _outLayerParam;
|
||||
D2D1_LAYER_PARAMETERS _inLayerParam;
|
||||
};
|
||||
|
||||
|
||||
class TransitionFade :
|
||||
public TransitionBase
|
||||
public Transition
|
||||
{
|
||||
public:
|
||||
// 创建淡入淡出式的场景切换动画
|
||||
|
|
@ -120,14 +89,14 @@ protected:
|
|||
virtual void _reset() override;
|
||||
|
||||
protected:
|
||||
double _fFadeOutDuration;
|
||||
double _fFadeInDuration;
|
||||
bool _bFadeOutTransioning;
|
||||
double _fadeOutDuration;
|
||||
double _fadeInDuration;
|
||||
bool _fadeOutTransioning;
|
||||
};
|
||||
|
||||
|
||||
class TransitionEmerge :
|
||||
public TransitionBase
|
||||
public Transition
|
||||
{
|
||||
public:
|
||||
// 创建浮现式的场景切换动画
|
||||
|
|
@ -149,13 +118,13 @@ protected:
|
|||
|
||||
|
||||
class TransitionMove :
|
||||
public TransitionBase
|
||||
public Transition
|
||||
{
|
||||
public:
|
||||
// 创建移动式的场景切换动画
|
||||
TransitionMove(
|
||||
double moveDuration, /* 场景移动动画持续时长 */
|
||||
Direct direct = Direct::LEFT /* 场景移动方向 */
|
||||
double moveDuration, /* 场景移动动画持续时长 */
|
||||
Direction direction = Direction::LEFT /* 场景移动方向 */
|
||||
);
|
||||
|
||||
protected:
|
||||
|
|
@ -170,9 +139,9 @@ protected:
|
|||
virtual void _reset() override;
|
||||
|
||||
protected:
|
||||
Direct _Direct;
|
||||
Vector _Vector;
|
||||
Point _NextPos;
|
||||
Direction _direction;
|
||||
Vector _posDelta;
|
||||
Point _startPos;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
@ -253,7 +253,6 @@
|
|||
<ClCompile Include="..\..\core\Tool\Random.cpp" />
|
||||
<ClCompile Include="..\..\core\Tool\Timer.cpp" />
|
||||
<ClCompile Include="..\..\core\Transition\Transition.cpp" />
|
||||
<ClCompile Include="..\..\core\Transition\TransitionBase.cpp" />
|
||||
<ClCompile Include="..\..\core\Transition\TransitionEmerge.cpp" />
|
||||
<ClCompile Include="..\..\core\Transition\TransitionFade.cpp" />
|
||||
<ClCompile Include="..\..\core\Transition\TransitionMove.cpp" />
|
||||
|
|
|
|||
|
|
@ -168,12 +168,6 @@
|
|||
<ClCompile Include="..\..\core\Common\Function.cpp">
|
||||
<Filter>Common</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Transition\TransitionBase.cpp">
|
||||
<Filter>Transition</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Transition\Transition.cpp">
|
||||
<Filter>Transition</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Action\Action.cpp">
|
||||
<Filter>Action</Filter>
|
||||
</ClCompile>
|
||||
|
|
@ -216,6 +210,9 @@
|
|||
<ClCompile Include="..\..\core\Action\Spawn.cpp">
|
||||
<Filter>Action</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Transition\Transition.cpp">
|
||||
<Filter>Transition</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\..\core\easy2d.h" />
|
||||
|
|
|
|||
Loading…
Reference in New Issue