Collider作为Node的成员对象;禁止Ref子类的拷贝
This commit is contained in:
parent
2ee6ec29fe
commit
de951eaa40
|
|
@ -45,6 +45,7 @@ void e2d::Game::start(bool cleanup)
|
||||||
auto timer = Timer::getInstance();
|
auto timer = Timer::getInstance();
|
||||||
auto sceneManager = SceneManager::getInstance();
|
auto sceneManager = SceneManager::getInstance();
|
||||||
auto actionManager = ActionManager::getInstance();
|
auto actionManager = ActionManager::getInstance();
|
||||||
|
auto colliderManager = ColliderManager::getInstance();
|
||||||
|
|
||||||
// 显示窗口
|
// 显示窗口
|
||||||
::ShowWindow(window->getHWnd(), SW_SHOWNORMAL);
|
::ShowWindow(window->getHWnd(), SW_SHOWNORMAL);
|
||||||
|
|
@ -76,6 +77,7 @@ void e2d::Game::start(bool cleanup)
|
||||||
timer->update(); // 更新定时器
|
timer->update(); // 更新定时器
|
||||||
actionManager->update(); // 更新动作管理器
|
actionManager->update(); // 更新动作管理器
|
||||||
sceneManager->update(); // 更新场景内容
|
sceneManager->update(); // 更新场景内容
|
||||||
|
colliderManager->update(); // 更新碰撞体
|
||||||
renderer->render(); // 渲染游戏画面
|
renderer->render(); // 渲染游戏画面
|
||||||
GC::flush(); // 刷新内存池
|
GC::flush(); // 刷新内存池
|
||||||
|
|
||||||
|
|
@ -145,8 +147,6 @@ void e2d::Game::cleanup()
|
||||||
Timer::getInstance()->clearAllTasks();
|
Timer::getInstance()->clearAllTasks();
|
||||||
// 清除所有动作
|
// 清除所有动作
|
||||||
ActionManager::getInstance()->clearAll();
|
ActionManager::getInstance()->clearAll();
|
||||||
// 清除所有碰撞体
|
|
||||||
ColliderManager::getInstance()->clearAll();
|
|
||||||
// 删除碰撞监听器
|
// 删除碰撞监听器
|
||||||
Collision::clearAllListeners();
|
Collision::clearAllListeners();
|
||||||
// 删除输入监听器
|
// 删除输入监听器
|
||||||
|
|
|
||||||
|
|
@ -2,15 +2,16 @@
|
||||||
#include "..\e2dmanager.h"
|
#include "..\e2dmanager.h"
|
||||||
#include "..\e2dnode.h"
|
#include "..\e2dnode.h"
|
||||||
|
|
||||||
e2d::Collider::Collider()
|
e2d::Collider::Collider(Node * parent)
|
||||||
: _visible(true)
|
: _visible(true)
|
||||||
, _color(Color::Red, 0.7)
|
, _color(Color::Red, 0.7)
|
||||||
, _parentNode(nullptr)
|
, _parentNode(parent)
|
||||||
, _transformed(nullptr)
|
, _transformed(nullptr)
|
||||||
, _geometry(nullptr)
|
, _geometry(nullptr)
|
||||||
, _enabled(true)
|
, _enabled(true)
|
||||||
, _type(Collider::Type::None)
|
, _type(Collider::Type::None)
|
||||||
{
|
{
|
||||||
|
_type = Game::getInstance()->getConfig()->getDefaultColliderType();
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::Collider::~Collider()
|
e2d::Collider::~Collider()
|
||||||
|
|
@ -19,11 +20,6 @@ e2d::Collider::~Collider()
|
||||||
SafeRelease(_geometry);
|
SafeRelease(_geometry);
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::Node * e2d::Collider::getParentNode() const
|
|
||||||
{
|
|
||||||
return _parentNode;
|
|
||||||
}
|
|
||||||
|
|
||||||
e2d::Color e2d::Collider::getColor() const
|
e2d::Color e2d::Collider::getColor() const
|
||||||
{
|
{
|
||||||
return _color;
|
return _color;
|
||||||
|
|
@ -93,76 +89,73 @@ void e2d::Collider::_recreate(Collider::Type type)
|
||||||
{
|
{
|
||||||
_type = type;
|
_type = type;
|
||||||
|
|
||||||
if (_parentNode)
|
SafeRelease(_geometry);
|
||||||
|
SafeRelease(_transformed);
|
||||||
|
|
||||||
|
switch (type)
|
||||||
{
|
{
|
||||||
SafeRelease(_geometry);
|
case Type::Rect:
|
||||||
SafeRelease(_transformed);
|
{
|
||||||
|
ID2D1RectangleGeometry* rectangle = nullptr;
|
||||||
|
Renderer::getFactory()->CreateRectangleGeometry(
|
||||||
|
D2D1::RectF(
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
float(_parentNode->getRealWidth()),
|
||||||
|
float(_parentNode->getRealHeight())),
|
||||||
|
&rectangle
|
||||||
|
);
|
||||||
|
_geometry = rectangle;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
switch (type)
|
case Type::Circle:
|
||||||
{
|
{
|
||||||
case Type::Rect:
|
double minSide = std::min(_parentNode->getRealWidth(), _parentNode->getRealHeight());
|
||||||
{
|
|
||||||
ID2D1RectangleGeometry* rectangle = nullptr;
|
|
||||||
Renderer::getFactory()->CreateRectangleGeometry(
|
|
||||||
D2D1::RectF(
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
float(_parentNode->getRealWidth()),
|
|
||||||
float(_parentNode->getRealHeight())),
|
|
||||||
&rectangle
|
|
||||||
);
|
|
||||||
_geometry = rectangle;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case Type::Circle:
|
ID2D1EllipseGeometry* circle = nullptr;
|
||||||
{
|
Renderer::getFactory()->CreateEllipseGeometry(
|
||||||
double minSide = std::min(_parentNode->getRealWidth(), _parentNode->getRealHeight());
|
D2D1::Ellipse(
|
||||||
|
D2D1::Point2F(
|
||||||
ID2D1EllipseGeometry* circle = nullptr;
|
float(_parentNode->getRealWidth() / 2),
|
||||||
Renderer::getFactory()->CreateEllipseGeometry(
|
float(_parentNode->getRealHeight() / 2)
|
||||||
D2D1::Ellipse(
|
|
||||||
D2D1::Point2F(
|
|
||||||
float(_parentNode->getRealWidth() / 2),
|
|
||||||
float(_parentNode->getRealHeight() / 2)
|
|
||||||
),
|
|
||||||
float(minSide / 2),
|
|
||||||
float(minSide / 2)
|
|
||||||
),
|
),
|
||||||
&circle
|
float(minSide / 2),
|
||||||
);
|
float(minSide / 2)
|
||||||
_geometry = circle;
|
),
|
||||||
}
|
&circle
|
||||||
|
);
|
||||||
|
_geometry = circle;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Type::Ellipse:
|
||||||
|
{
|
||||||
|
float halfWidth = float(_parentNode->getWidth() / 2),
|
||||||
|
halfHeight = float(_parentNode->getHeight() / 2);
|
||||||
|
|
||||||
|
ID2D1EllipseGeometry* ellipse = nullptr;
|
||||||
|
Renderer::getFactory()->CreateEllipseGeometry(
|
||||||
|
D2D1::Ellipse(
|
||||||
|
D2D1::Point2F(
|
||||||
|
halfWidth,
|
||||||
|
halfHeight),
|
||||||
|
halfWidth,
|
||||||
|
halfHeight),
|
||||||
|
&ellipse
|
||||||
|
);
|
||||||
|
_geometry = ellipse;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Type::Ellipse:
|
|
||||||
{
|
|
||||||
float halfWidth = float(_parentNode->getWidth() / 2),
|
|
||||||
halfHeight = float(_parentNode->getHeight() / 2);
|
|
||||||
|
|
||||||
ID2D1EllipseGeometry* ellipse = nullptr;
|
|
||||||
Renderer::getFactory()->CreateEllipseGeometry(
|
|
||||||
D2D1::Ellipse(
|
|
||||||
D2D1::Point2F(
|
|
||||||
halfWidth,
|
|
||||||
halfHeight),
|
|
||||||
halfWidth,
|
|
||||||
halfHeight),
|
|
||||||
&ellipse
|
|
||||||
);
|
|
||||||
_geometry = ellipse;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::Collider::_transform()
|
void e2d::Collider::_transform()
|
||||||
{
|
{
|
||||||
if (_parentNode && _enabled)
|
if (_enabled && _type != Type::None)
|
||||||
{
|
{
|
||||||
// 重新生成碰撞体
|
// 重新生成碰撞体
|
||||||
_recreate(_type);
|
_recreate(_type);
|
||||||
|
|
@ -172,7 +165,5 @@ void e2d::Collider::_transform()
|
||||||
_parentNode->_finalMatri,
|
_parentNode->_finalMatri,
|
||||||
&_transformed
|
&_transformed
|
||||||
);
|
);
|
||||||
// ֪ͨÅöײÌå¹ÜÀíÆ÷
|
|
||||||
ColliderManager::getInstance()->__updateCollider(this);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ void e2d::Scene::_render()
|
||||||
// 恢复矩阵转换
|
// 恢复矩阵转换
|
||||||
Renderer::getInstance()->getRenderTarget()->SetTransform(D2D1::Matrix3x2F::Identity());
|
Renderer::getInstance()->getRenderTarget()->SetTransform(D2D1::Matrix3x2F::Identity());
|
||||||
// 绘制所有几何图形
|
// 绘制所有几何图形
|
||||||
_root->_drawCollider();
|
_root->_renderCollider();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
#include "..\e2dmanager.h"
|
#include "..\e2dmanager.h"
|
||||||
#include "..\e2dnode.h"
|
#include "..\e2dnode.h"
|
||||||
#include "..\e2dcollider.h"
|
#include "..\e2dcollider.h"
|
||||||
#include "..\e2dtool.h"
|
|
||||||
|
|
||||||
|
|
||||||
e2d::ColliderManager * e2d::ColliderManager::_instance = nullptr;
|
e2d::ColliderManager * e2d::ColliderManager::_instance = nullptr;
|
||||||
|
|
@ -23,7 +22,6 @@ void e2d::ColliderManager::destroyInstance()
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::ColliderManager::ColliderManager()
|
e2d::ColliderManager::ColliderManager()
|
||||||
: _colliders()
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -31,79 +29,63 @@ e2d::ColliderManager::~ColliderManager()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::ColliderManager::clearAll()
|
void e2d::ColliderManager::__remove(Node * node)
|
||||||
{
|
{
|
||||||
for (auto collder : _colliders)
|
if (node)
|
||||||
{
|
{
|
||||||
GC::release(collder);
|
auto iter = std::find(_nodes.begin(), _nodes.end(), node);
|
||||||
|
if (iter != _nodes.end())
|
||||||
|
{
|
||||||
|
_nodes.erase(iter);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
_colliders.clear();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::ColliderManager::__updateCollider(e2d::Collider * pActiveCollider)
|
void e2d::ColliderManager::updateCollider(Node * node)
|
||||||
|
{
|
||||||
|
if (node)
|
||||||
|
{
|
||||||
|
if (node->getCollider()->_type != Collider::Type::None)
|
||||||
|
{
|
||||||
|
node->getCollider()->_transform();
|
||||||
|
_nodes.insert(node);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::ColliderManager::update()
|
||||||
{
|
{
|
||||||
// 判断碰撞监听是否打开
|
// 判断碰撞监听是否打开
|
||||||
if (!Game::getInstance()->getConfig()->isCollisionEnabled())
|
if (Game::getInstance()->isPaused() ||
|
||||||
return;
|
!Game::getInstance()->getConfig()->isCollisionEnabled() ||
|
||||||
|
SceneManager::getInstance()->isTransitioning())
|
||||||
Node* pActiveNode = pActiveCollider->_parentNode;
|
|
||||||
if (pActiveNode)
|
|
||||||
{
|
{
|
||||||
// 获取节点所在场景
|
_nodes.clear();
|
||||||
Scene* pCurrentScene = pActiveNode->getParentScene();
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (auto iter1 = _nodes.begin(); iter1 != _nodes.end(); iter1++)
|
||||||
|
{
|
||||||
|
auto node1 = (*iter1);
|
||||||
// 判断与其他碰撞体的交集情况
|
// 判断与其他碰撞体的交集情况
|
||||||
for (size_t i = 0; i < _colliders.size(); ++i)
|
auto iter2 = iter1;
|
||||||
|
iter2++;
|
||||||
|
for (; iter2 != _nodes.end(); iter2++)
|
||||||
{
|
{
|
||||||
auto pPassiveCollider = _colliders[i];
|
auto node2 = (*iter2);
|
||||||
// 判断两个碰撞体是否是同一个对象
|
// 判断两物体是否是相互冲突的物体
|
||||||
if (pActiveCollider == pPassiveCollider)
|
if (Collision::isCollidable(node1, node2))
|
||||||
continue;
|
|
||||||
|
|
||||||
// 获取被碰撞节点
|
|
||||||
Node* pPassiveNode = pPassiveCollider->_parentNode;
|
|
||||||
// 判断两节点是否处于同一场景中
|
|
||||||
if (pPassiveNode &&
|
|
||||||
pPassiveNode->getParentScene() == pCurrentScene)
|
|
||||||
{
|
{
|
||||||
// 判断两物体是否是相互冲突的物体
|
// 判断两碰撞体交集情况
|
||||||
if (Collision::isCollidable(pActiveNode, pPassiveNode))
|
Collider::Relation relation = node1->getCollider()->getRelationWith(node2->getCollider());
|
||||||
|
// 忽略 UNKNOWN 和 DISJOIN 情况
|
||||||
|
if (relation != Collider::Relation::Unknown && relation != Collider::Relation::Disjoin)
|
||||||
{
|
{
|
||||||
// 判断两碰撞体交集情况
|
// 更新碰撞监听器
|
||||||
Collider::Relation relation = pActiveCollider->getRelationWith(pPassiveCollider);
|
Collision::__update(node1, node2);
|
||||||
// 忽略 UNKNOWN 和 DISJOIN 情况
|
|
||||||
if (relation != Collider::Relation::Unknown && relation != Collider::Relation::Disjoin)
|
|
||||||
{
|
|
||||||
// 更新碰撞监听器
|
|
||||||
Collision::__update(pActiveNode, pPassiveNode);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
_nodes.clear();
|
||||||
|
|
||||||
void e2d::ColliderManager::__add(Collider * collider)
|
|
||||||
{
|
|
||||||
if (collider)
|
|
||||||
{
|
|
||||||
GC::retain(collider);
|
|
||||||
_colliders.push_back(collider);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void e2d::ColliderManager::__remove(Collider * collider)
|
|
||||||
{
|
|
||||||
if (collider)
|
|
||||||
{
|
|
||||||
for (size_t i = 0; i < _colliders.size(); ++i)
|
|
||||||
{
|
|
||||||
if (_colliders[i] == collider)
|
|
||||||
{
|
|
||||||
GC::release(collider);
|
|
||||||
_colliders.erase(_colliders.begin() + i);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ e2d::Node::Node()
|
||||||
, _initialMatri(D2D1::Matrix3x2F::Identity())
|
, _initialMatri(D2D1::Matrix3x2F::Identity())
|
||||||
, _finalMatri(D2D1::Matrix3x2F::Identity())
|
, _finalMatri(D2D1::Matrix3x2F::Identity())
|
||||||
, _visible(true)
|
, _visible(true)
|
||||||
, _collider(nullptr)
|
, _collider(this)
|
||||||
, _parent(nullptr)
|
, _parent(nullptr)
|
||||||
, _parentScene(nullptr)
|
, _parentScene(nullptr)
|
||||||
, _hashName(0)
|
, _hashName(0)
|
||||||
|
|
@ -30,21 +30,17 @@ e2d::Node::Node()
|
||||||
, _needTransform(false)
|
, _needTransform(false)
|
||||||
, _autoUpdate(true)
|
, _autoUpdate(true)
|
||||||
, _positionFixed(false)
|
, _positionFixed(false)
|
||||||
, _colliderType(Collider::Type::None)
|
|
||||||
{
|
{
|
||||||
auto& config = Game::getInstance()->getConfig();
|
|
||||||
// 设置默认中心点位置
|
// 设置默认中心点位置
|
||||||
Point defPivot = config.getNodeDefaultPivot();
|
Point defPivot = Game::getInstance()->getConfig()->getNodeDefaultPivot();
|
||||||
this->_pivotX = float(defPivot.x);
|
this->_pivotX = float(defPivot.x);
|
||||||
this->_pivotY = float(defPivot.y);
|
this->_pivotY = float(defPivot.y);
|
||||||
// 设置默认碰撞体类型
|
|
||||||
this->setColliderType(config.getDefaultColliderType());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::Node::~Node()
|
e2d::Node::~Node()
|
||||||
{
|
{
|
||||||
ActionManager::getInstance()->clearAllBindedWith(this);
|
ActionManager::getInstance()->clearAllBindedWith(this);
|
||||||
ColliderManager::getInstance()->__remove(_collider);
|
ColliderManager::getInstance()->__remove(this);
|
||||||
for (auto child : _children)
|
for (auto child : _children)
|
||||||
{
|
{
|
||||||
GC::release(child);
|
GC::release(child);
|
||||||
|
|
@ -147,18 +143,18 @@ void e2d::Node::_render()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::Node::_drawCollider()
|
void e2d::Node::_renderCollider()
|
||||||
{
|
{
|
||||||
// 绘制自身的几何碰撞体
|
// 绘制自身的几何碰撞体
|
||||||
if (_collider && _collider->_visible)
|
if (_collider._visible)
|
||||||
{
|
{
|
||||||
_collider->_render();
|
_collider._render();
|
||||||
}
|
}
|
||||||
|
|
||||||
// 绘制所有子节点的几何碰撞体
|
// 绘制所有子节点的几何碰撞体
|
||||||
for (auto child : _children)
|
for (auto child : _children)
|
||||||
{
|
{
|
||||||
child->_drawCollider();
|
child->_renderCollider();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -194,11 +190,8 @@ void e2d::Node::_updateTransform()
|
||||||
_finalMatri = _finalMatri * _parent->_initialMatri;
|
_finalMatri = _finalMatri * _parent->_initialMatri;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 重新生成碰撞体
|
// ¸üÐÂÅöײÌå
|
||||||
if (_collider)
|
ColliderManager::getInstance()->updateCollider(this);
|
||||||
{
|
|
||||||
_collider->_transform();
|
|
||||||
}
|
|
||||||
// 标志已执行过变换
|
// 标志已执行过变换
|
||||||
_needTransform = false;
|
_needTransform = false;
|
||||||
|
|
||||||
|
|
@ -354,9 +347,9 @@ e2d::Node::Property e2d::Node::getProperty() const
|
||||||
return prop;
|
return prop;
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::Collider * e2d::Node::getCollider() const
|
e2d::Collider* e2d::Node::getCollider()
|
||||||
{
|
{
|
||||||
return _collider;
|
return &_collider;
|
||||||
}
|
}
|
||||||
|
|
||||||
int e2d::Node::getOrder() const
|
int e2d::Node::getOrder() const
|
||||||
|
|
@ -546,50 +539,10 @@ void e2d::Node::setProperty(Property prop)
|
||||||
|
|
||||||
void e2d::Node::setColliderType(Collider::Type type)
|
void e2d::Node::setColliderType(Collider::Type type)
|
||||||
{
|
{
|
||||||
if (_colliderType == type)
|
if (_collider._type != type)
|
||||||
return;
|
|
||||||
|
|
||||||
_colliderType = type;
|
|
||||||
if (_collider)
|
|
||||||
{
|
{
|
||||||
switch (type)
|
_collider._recreate(type);
|
||||||
{
|
_needTransform = true;
|
||||||
case Collider::Type::Rect:
|
|
||||||
case Collider::Type::Circle:
|
|
||||||
case Collider::Type::Ellipse:
|
|
||||||
{
|
|
||||||
this->_collider->_recreate(type);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
{
|
|
||||||
// 删除碰撞体
|
|
||||||
ColliderManager::getInstance()->__remove(_collider);
|
|
||||||
_collider = nullptr;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
switch (type)
|
|
||||||
{
|
|
||||||
case Collider::Type::Rect:
|
|
||||||
case Collider::Type::Circle:
|
|
||||||
case Collider::Type::Ellipse:
|
|
||||||
{
|
|
||||||
_collider = new (e2d::autorelease) Collider();
|
|
||||||
_collider->_parentNode = this;
|
|
||||||
_collider->_recreate(type);
|
|
||||||
// 添加新的碰撞体
|
|
||||||
ColliderManager::getInstance()->__add(_collider);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -811,9 +764,9 @@ bool e2d::Node::containsPoint(const Point& point) const
|
||||||
{
|
{
|
||||||
BOOL ret = 0;
|
BOOL ret = 0;
|
||||||
// 如果存在碰撞体,用碰撞体判断
|
// 如果存在碰撞体,用碰撞体判断
|
||||||
if (_collider && _collider->getGeometry())
|
if (_collider.getGeometry())
|
||||||
{
|
{
|
||||||
_collider->getGeometry()->FillContainsPoint(
|
_collider.getGeometry()->FillContainsPoint(
|
||||||
D2D1::Point2F(
|
D2D1::Point2F(
|
||||||
float(point.x),
|
float(point.x),
|
||||||
float(point.y)),
|
float(point.y)),
|
||||||
|
|
@ -852,9 +805,9 @@ bool e2d::Node::containsPoint(const Point& point) const
|
||||||
bool e2d::Node::intersects(Node * node) const
|
bool e2d::Node::intersects(Node * node) const
|
||||||
{
|
{
|
||||||
// 如果存在碰撞体,用碰撞体判断
|
// 如果存在碰撞体,用碰撞体判断
|
||||||
if (this->_collider && node->_collider)
|
if (this->_collider.getGeometry() && node->_collider.getGeometry())
|
||||||
{
|
{
|
||||||
Collider::Relation relation = this->_collider->getRelationWith(node->_collider);
|
Collider::Relation relation = this->_collider.getRelationWith(&node->_collider);
|
||||||
if ((relation != Collider::Relation::Unknown) &&
|
if ((relation != Collider::Relation::Unknown) &&
|
||||||
(relation != Collider::Relation::Disjoin))
|
(relation != Collider::Relation::Disjoin))
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -60,6 +60,8 @@ public:
|
||||||
virtual Node * getTarget();
|
virtual Node * getTarget();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
E2D_DISABLE_COPY(Action);
|
||||||
|
|
||||||
// 初始化动作
|
// 初始化动作
|
||||||
virtual void _init();
|
virtual void _init();
|
||||||
|
|
||||||
|
|
@ -101,6 +103,8 @@ public:
|
||||||
virtual void reset() override;
|
virtual void reset() override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
E2D_DISABLE_COPY(FiniteTimeAction);
|
||||||
|
|
||||||
// 初始化动作
|
// 初始化动作
|
||||||
virtual void _init() override;
|
virtual void _init() override;
|
||||||
|
|
||||||
|
|
@ -133,6 +137,8 @@ public:
|
||||||
virtual MoveBy * reverse() const override;
|
virtual MoveBy * reverse() const override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
E2D_DISABLE_COPY(MoveBy);
|
||||||
|
|
||||||
// 初始化动作
|
// 初始化动作
|
||||||
virtual void _init() override;
|
virtual void _init() override;
|
||||||
|
|
||||||
|
|
@ -167,6 +173,8 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
E2D_DISABLE_COPY(MoveTo);
|
||||||
|
|
||||||
// 初始化动作
|
// 初始化动作
|
||||||
virtual void _init() override;
|
virtual void _init() override;
|
||||||
|
|
||||||
|
|
@ -194,6 +202,8 @@ public:
|
||||||
virtual JumpBy * reverse() const override;
|
virtual JumpBy * reverse() const override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
E2D_DISABLE_COPY(JumpBy);
|
||||||
|
|
||||||
// 初始化动作
|
// 初始化动作
|
||||||
virtual void _init() override;
|
virtual void _init() override;
|
||||||
|
|
||||||
|
|
@ -232,6 +242,8 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
E2D_DISABLE_COPY(JumpTo);
|
||||||
|
|
||||||
// 初始化动作
|
// 初始化动作
|
||||||
virtual void _init() override;
|
virtual void _init() override;
|
||||||
|
|
||||||
|
|
@ -263,6 +275,8 @@ public:
|
||||||
virtual ScaleBy * reverse() const override;
|
virtual ScaleBy * reverse() const override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
E2D_DISABLE_COPY(ScaleBy);
|
||||||
|
|
||||||
// 初始化动作
|
// 初始化动作
|
||||||
virtual void _init() override;
|
virtual void _init() override;
|
||||||
|
|
||||||
|
|
@ -304,6 +318,8 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
E2D_DISABLE_COPY(ScaleTo);
|
||||||
|
|
||||||
// 初始化动作
|
// 初始化动作
|
||||||
virtual void _init() override;
|
virtual void _init() override;
|
||||||
|
|
||||||
|
|
@ -330,6 +346,8 @@ public:
|
||||||
virtual OpacityBy * reverse() const override;
|
virtual OpacityBy * reverse() const override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
E2D_DISABLE_COPY(OpacityBy);
|
||||||
|
|
||||||
// 初始化动作
|
// 初始化动作
|
||||||
virtual void _init() override;
|
virtual void _init() override;
|
||||||
|
|
||||||
|
|
@ -363,6 +381,8 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
E2D_DISABLE_COPY(OpacityTo);
|
||||||
|
|
||||||
// 初始化动作
|
// 初始化动作
|
||||||
virtual void _init() override;
|
virtual void _init() override;
|
||||||
|
|
||||||
|
|
@ -383,6 +403,9 @@ public:
|
||||||
: OpacityTo(duration, 1)
|
: OpacityTo(duration, 1)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
E2D_DISABLE_COPY(FadeIn);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -398,6 +421,9 @@ public:
|
||||||
: OpacityTo(duration, 0)
|
: OpacityTo(duration, 0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
E2D_DISABLE_COPY(FadeOut);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -418,6 +444,8 @@ public:
|
||||||
virtual RotateBy * reverse() const override;
|
virtual RotateBy * reverse() const override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
E2D_DISABLE_COPY(RotateBy);
|
||||||
|
|
||||||
// 初始化动作
|
// 初始化动作
|
||||||
virtual void _init() override;
|
virtual void _init() override;
|
||||||
|
|
||||||
|
|
@ -451,6 +479,8 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
E2D_DISABLE_COPY(RotateTo);
|
||||||
|
|
||||||
// 初始化动作
|
// 初始化动作
|
||||||
virtual void _init() override;
|
virtual void _init() override;
|
||||||
|
|
||||||
|
|
@ -478,6 +508,8 @@ public:
|
||||||
virtual void reset() override;
|
virtual void reset() override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
E2D_DISABLE_COPY(Delay);
|
||||||
|
|
||||||
// 初始化动作
|
// 初始化动作
|
||||||
virtual void _init() override;
|
virtual void _init() override;
|
||||||
|
|
||||||
|
|
@ -515,6 +547,8 @@ public:
|
||||||
virtual void reset() override;
|
virtual void reset() override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
E2D_DISABLE_COPY(Loop);
|
||||||
|
|
||||||
// 初始化动作
|
// 初始化动作
|
||||||
virtual void _init() override;
|
virtual void _init() override;
|
||||||
|
|
||||||
|
|
@ -547,6 +581,8 @@ public:
|
||||||
virtual CallFunc * reverse() const override;
|
virtual CallFunc * reverse() const override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
E2D_DISABLE_COPY(CallFunc);
|
||||||
|
|
||||||
// 初始化动作
|
// 初始化动作
|
||||||
virtual void _init() override;
|
virtual void _init() override;
|
||||||
|
|
||||||
|
|
@ -591,6 +627,8 @@ public:
|
||||||
virtual void reset() override;
|
virtual void reset() override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
E2D_DISABLE_COPY(Sequence);
|
||||||
|
|
||||||
// 初始化动作
|
// 初始化动作
|
||||||
virtual void _init() override;
|
virtual void _init() override;
|
||||||
|
|
||||||
|
|
@ -639,6 +677,8 @@ public:
|
||||||
virtual void reset() override;
|
virtual void reset() override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
E2D_DISABLE_COPY(Spawn);
|
||||||
|
|
||||||
// 初始化动作
|
// 初始化动作
|
||||||
virtual void _init() override;
|
virtual void _init() override;
|
||||||
|
|
||||||
|
|
@ -702,6 +742,9 @@ public:
|
||||||
// 获取帧动画的倒转
|
// 获取帧动画的倒转
|
||||||
Animation * reverse() const;
|
Animation * reverse() const;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
E2D_DISABLE_COPY(Animation);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
double _interval;
|
double _interval;
|
||||||
std::vector<Image*> _frames;
|
std::vector<Image*> _frames;
|
||||||
|
|
@ -739,6 +782,8 @@ public:
|
||||||
virtual void reset() override;
|
virtual void reset() override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
E2D_DISABLE_COPY(Animate);
|
||||||
|
|
||||||
// 初始化动作
|
// 初始化动作
|
||||||
virtual void _init() override;
|
virtual void _init() override;
|
||||||
|
|
||||||
|
|
|
||||||
190
core/e2dcommon.h
190
core/e2dcommon.h
|
|
@ -440,6 +440,96 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class Node;
|
||||||
|
class ColliderManager;
|
||||||
|
|
||||||
|
// 碰撞体
|
||||||
|
class Collider
|
||||||
|
{
|
||||||
|
friend class Node;
|
||||||
|
friend class ColliderManager;
|
||||||
|
|
||||||
|
public:
|
||||||
|
// 碰撞体类别
|
||||||
|
enum class Type
|
||||||
|
{
|
||||||
|
None, /* 无 */
|
||||||
|
Rect, /* 矩形 */
|
||||||
|
Circle, /* 圆形 */
|
||||||
|
Ellipse /* 椭圆形 */
|
||||||
|
};
|
||||||
|
|
||||||
|
// 碰撞体交集关系
|
||||||
|
enum class Relation : int
|
||||||
|
{
|
||||||
|
Unknown = 0, /* 关系不确定 */
|
||||||
|
Disjoin = 1, /* 没有交集 */
|
||||||
|
IsContained = 2, /* 完全被包含 */
|
||||||
|
Contains = 3, /* 完全包含 */
|
||||||
|
Overlap = 4 /* 部分重叠 */
|
||||||
|
};
|
||||||
|
|
||||||
|
public:
|
||||||
|
// 启用或关闭该碰撞体
|
||||||
|
virtual void setEnabled(
|
||||||
|
bool enabled
|
||||||
|
);
|
||||||
|
|
||||||
|
// 设置碰撞体的可见性
|
||||||
|
void setVisible(
|
||||||
|
bool visible
|
||||||
|
);
|
||||||
|
|
||||||
|
// 设置绘制颜色
|
||||||
|
void setColor(
|
||||||
|
Color color
|
||||||
|
);
|
||||||
|
|
||||||
|
// 判断两碰撞体的交集关系
|
||||||
|
virtual Relation getRelationWith(
|
||||||
|
Collider * pCollider
|
||||||
|
) const;
|
||||||
|
|
||||||
|
// 获取绘制颜色
|
||||||
|
Color getColor() const;
|
||||||
|
|
||||||
|
// 获取 ID2D1Geometry* 对象
|
||||||
|
ID2D1Geometry* getGeometry() const;
|
||||||
|
|
||||||
|
// 获取 ID2D1TransformedGeometry* 对象
|
||||||
|
ID2D1TransformedGeometry* getTransformedGeometry() const;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
Collider(
|
||||||
|
Node * parent
|
||||||
|
);
|
||||||
|
|
||||||
|
virtual ~Collider();
|
||||||
|
|
||||||
|
E2D_DISABLE_COPY(Collider);
|
||||||
|
|
||||||
|
// 重新生成
|
||||||
|
void _recreate(
|
||||||
|
Collider::Type type
|
||||||
|
);
|
||||||
|
|
||||||
|
// 二维变换
|
||||||
|
void _transform();
|
||||||
|
|
||||||
|
// 渲染碰撞体
|
||||||
|
void _render();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
bool _enabled;
|
||||||
|
bool _visible;
|
||||||
|
Color _color;
|
||||||
|
Node * _parentNode;
|
||||||
|
Type _type;
|
||||||
|
ID2D1Geometry* _geometry;
|
||||||
|
ID2D1TransformedGeometry* _transformed;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
// 引用计数对象
|
// 引用计数对象
|
||||||
class Ref
|
class Ref
|
||||||
{
|
{
|
||||||
|
|
@ -457,6 +547,9 @@ public:
|
||||||
// 获取引用计数
|
// 获取引用计数
|
||||||
int getRefCount() const;
|
int getRefCount() const;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
E2D_DISABLE_COPY(Ref);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int _refCount;
|
int _refCount;
|
||||||
};
|
};
|
||||||
|
|
@ -552,6 +645,8 @@ public:
|
||||||
static void clearCache();
|
static void clearCache();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
E2D_DISABLE_COPY(Image);
|
||||||
|
|
||||||
// 设置 Bitmap
|
// 设置 Bitmap
|
||||||
void _setBitmap(
|
void _setBitmap(
|
||||||
ID2D1Bitmap * bitmap
|
ID2D1Bitmap * bitmap
|
||||||
|
|
@ -563,7 +658,6 @@ protected:
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class Node;
|
|
||||||
class SceneManager;
|
class SceneManager;
|
||||||
class Transition;
|
class Transition;
|
||||||
|
|
||||||
|
|
@ -630,6 +724,8 @@ public:
|
||||||
Node * getRoot() const;
|
Node * getRoot() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
E2D_DISABLE_COPY(Scene);
|
||||||
|
|
||||||
// 渲染场景画面
|
// 渲染场景画面
|
||||||
void _render();
|
void _render();
|
||||||
|
|
||||||
|
|
@ -642,95 +738,6 @@ protected:
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class ColliderManager;
|
|
||||||
|
|
||||||
// 碰撞体
|
|
||||||
class Collider :
|
|
||||||
public Ref
|
|
||||||
{
|
|
||||||
friend class Node;
|
|
||||||
friend class ColliderManager;
|
|
||||||
|
|
||||||
public:
|
|
||||||
// 碰撞体类别
|
|
||||||
enum class Type
|
|
||||||
{
|
|
||||||
None, /* 无 */
|
|
||||||
Rect, /* 矩形 */
|
|
||||||
Circle, /* 圆形 */
|
|
||||||
Ellipse /* 椭圆形 */
|
|
||||||
};
|
|
||||||
|
|
||||||
// 碰撞体交集关系
|
|
||||||
enum class Relation : int
|
|
||||||
{
|
|
||||||
Unknown = 0, /* 关系不确定 */
|
|
||||||
Disjoin = 1, /* 没有交集 */
|
|
||||||
IsContained = 2, /* 完全被包含 */
|
|
||||||
Contains = 3, /* 完全包含 */
|
|
||||||
Overlap = 4 /* 部分重叠 */
|
|
||||||
};
|
|
||||||
|
|
||||||
public:
|
|
||||||
Collider();
|
|
||||||
|
|
||||||
virtual ~Collider();
|
|
||||||
|
|
||||||
// 启用或关闭该碰撞体
|
|
||||||
virtual void setEnabled(
|
|
||||||
bool enabled
|
|
||||||
);
|
|
||||||
|
|
||||||
// 设置碰撞体的可见性
|
|
||||||
void setVisible(
|
|
||||||
bool visible
|
|
||||||
);
|
|
||||||
|
|
||||||
// 设置绘制颜色
|
|
||||||
void setColor(
|
|
||||||
Color color
|
|
||||||
);
|
|
||||||
|
|
||||||
// 判断两碰撞体的交集关系
|
|
||||||
virtual Relation getRelationWith(
|
|
||||||
Collider * pCollider
|
|
||||||
) const;
|
|
||||||
|
|
||||||
// 获取父节点
|
|
||||||
Node * getParentNode() const;
|
|
||||||
|
|
||||||
// 获取绘制颜色
|
|
||||||
Color getColor() const;
|
|
||||||
|
|
||||||
// 获取 ID2D1Geometry* 对象
|
|
||||||
ID2D1Geometry* getGeometry() const;
|
|
||||||
|
|
||||||
// 获取 ID2D1TransformedGeometry* 对象
|
|
||||||
ID2D1TransformedGeometry* getTransformedGeometry() const;
|
|
||||||
|
|
||||||
protected:
|
|
||||||
// 重新生成
|
|
||||||
void _recreate(
|
|
||||||
Collider::Type type
|
|
||||||
);
|
|
||||||
|
|
||||||
// 二维变换
|
|
||||||
void _transform();
|
|
||||||
|
|
||||||
// 渲染碰撞体
|
|
||||||
void _render();
|
|
||||||
|
|
||||||
protected:
|
|
||||||
bool _enabled;
|
|
||||||
bool _visible;
|
|
||||||
Color _color;
|
|
||||||
Node * _parentNode;
|
|
||||||
Type _type;
|
|
||||||
ID2D1Geometry* _geometry;
|
|
||||||
ID2D1TransformedGeometry* _transformed;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
class Game;
|
class Game;
|
||||||
|
|
||||||
// 游戏配置
|
// 游戏配置
|
||||||
|
|
@ -815,8 +822,6 @@ protected:
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifndef __AUTORELEASE_T_DEFINED
|
|
||||||
#define __AUTORELEASE_T_DEFINED
|
|
||||||
namespace e2d
|
namespace e2d
|
||||||
{
|
{
|
||||||
struct autorelease_t { };
|
struct autorelease_t { };
|
||||||
|
|
@ -843,4 +848,3 @@ void operator delete[](
|
||||||
void* block,
|
void* block,
|
||||||
e2d::autorelease_t const&
|
e2d::autorelease_t const&
|
||||||
) E2D_NOEXCEPT;
|
) E2D_NOEXCEPT;
|
||||||
#endif
|
|
||||||
|
|
|
||||||
|
|
@ -174,7 +174,6 @@ private:
|
||||||
class ColliderManager
|
class ColliderManager
|
||||||
{
|
{
|
||||||
friend class Node;
|
friend class Node;
|
||||||
friend class Collider;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// 获取碰撞体管理器实例
|
// 获取碰撞体管理器实例
|
||||||
|
|
@ -183,8 +182,13 @@ public:
|
||||||
// 销毁实例
|
// 销毁实例
|
||||||
static void destroyInstance();
|
static void destroyInstance();
|
||||||
|
|
||||||
// 强制清除所有碰撞体
|
// 更新碰撞体
|
||||||
void clearAll();
|
void updateCollider(
|
||||||
|
Node * node
|
||||||
|
);
|
||||||
|
|
||||||
|
// 更新碰撞体管理器
|
||||||
|
void update();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ColliderManager();
|
ColliderManager();
|
||||||
|
|
@ -193,23 +197,12 @@ private:
|
||||||
|
|
||||||
E2D_DISABLE_COPY(ColliderManager);
|
E2D_DISABLE_COPY(ColliderManager);
|
||||||
|
|
||||||
// 更新碰撞体
|
|
||||||
void __updateCollider(
|
|
||||||
Collider * pActiveCollider
|
|
||||||
);
|
|
||||||
|
|
||||||
// 添加碰撞体
|
|
||||||
void __add(
|
|
||||||
Collider * pCollider
|
|
||||||
);
|
|
||||||
|
|
||||||
// 删除已绑定的碰撞体
|
|
||||||
void __remove(
|
void __remove(
|
||||||
Collider * pCollider
|
Node* node
|
||||||
);
|
);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::vector<Collider*> _colliders;
|
std::set<Node*> _nodes;
|
||||||
|
|
||||||
static ColliderManager * _instance;
|
static ColliderManager * _instance;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -122,7 +122,7 @@ public:
|
||||||
virtual Property getProperty() const;
|
virtual Property getProperty() const;
|
||||||
|
|
||||||
// 获取节点碰撞体
|
// 获取节点碰撞体
|
||||||
virtual Collider * getCollider() const;
|
virtual Collider * getCollider();
|
||||||
|
|
||||||
// 获取父节点
|
// 获取父节点
|
||||||
virtual Node * getParent() const;
|
virtual Node * getParent() const;
|
||||||
|
|
@ -378,14 +378,16 @@ public:
|
||||||
virtual void stopAllActions();
|
virtual void stopAllActions();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
E2D_DISABLE_COPY(Node);
|
||||||
|
|
||||||
// 更新节点
|
// 更新节点
|
||||||
void _update();
|
void _update();
|
||||||
|
|
||||||
// 渲染节点
|
// 渲染节点
|
||||||
void _render();
|
void _render();
|
||||||
|
|
||||||
// äÖȾͼÐÎ
|
// äÖȾÅöײÌåÂÖÀª
|
||||||
void _drawCollider();
|
void _renderCollider();
|
||||||
|
|
||||||
// 设置节点所在场景
|
// 设置节点所在场景
|
||||||
void _setParentScene(
|
void _setParentScene(
|
||||||
|
|
@ -426,10 +428,9 @@ protected:
|
||||||
bool _needSort;
|
bool _needSort;
|
||||||
bool _needTransform;
|
bool _needTransform;
|
||||||
bool _positionFixed;
|
bool _positionFixed;
|
||||||
Collider * _collider;
|
Collider _collider;
|
||||||
Scene * _parentScene;
|
Scene * _parentScene;
|
||||||
Node * _parent;
|
Node * _parent;
|
||||||
Collider::Type _colliderType;
|
|
||||||
D2D1::Matrix3x2F _initialMatri;
|
D2D1::Matrix3x2F _initialMatri;
|
||||||
D2D1::Matrix3x2F _finalMatri;
|
D2D1::Matrix3x2F _finalMatri;
|
||||||
std::vector<Node*> _children;
|
std::vector<Node*> _children;
|
||||||
|
|
@ -495,6 +496,9 @@ public:
|
||||||
// 渲染精灵
|
// 渲染精灵
|
||||||
virtual void onRender() override;
|
virtual void onRender() override;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
E2D_DISABLE_COPY(Sprite);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Image * _image;
|
Image * _image;
|
||||||
};
|
};
|
||||||
|
|
@ -697,6 +701,8 @@ public:
|
||||||
virtual void onRender() override;
|
virtual void onRender() override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
E2D_DISABLE_COPY(Text);
|
||||||
|
|
||||||
// 重新排版文字
|
// 重新排版文字
|
||||||
void _reset();
|
void _reset();
|
||||||
|
|
||||||
|
|
@ -781,6 +787,8 @@ public:
|
||||||
);
|
);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
E2D_DISABLE_COPY(Button);
|
||||||
|
|
||||||
// 按钮状态枚举
|
// 按钮状态枚举
|
||||||
enum class ButtonState { Normal, Mouseover, Selected };
|
enum class ButtonState { Normal, Mouseover, Selected };
|
||||||
|
|
||||||
|
|
@ -899,6 +907,8 @@ public:
|
||||||
);
|
);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
E2D_DISABLE_COPY(ToggleButton);
|
||||||
|
|
||||||
// 刷新按钮开关
|
// 刷新按钮开关
|
||||||
virtual void _updateState();
|
virtual void _updateState();
|
||||||
|
|
||||||
|
|
@ -948,6 +958,9 @@ public:
|
||||||
// 获取所有按钮
|
// 获取所有按钮
|
||||||
const std::vector<Button*>& getAllButtons() const;
|
const std::vector<Button*>& getAllButtons() const;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
E2D_DISABLE_COPY(Menu);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool _enabled;
|
bool _enabled;
|
||||||
std::vector<Button*> _buttons;
|
std::vector<Button*> _buttons;
|
||||||
|
|
|
||||||
|
|
@ -62,6 +62,8 @@ public:
|
||||||
virtual void onRender() override;
|
virtual void onRender() override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
E2D_DISABLE_COPY(Shape);
|
||||||
|
|
||||||
// äÖȾÂÖÀª
|
// äÖȾÂÖÀª
|
||||||
virtual void _renderLine() = 0;
|
virtual void _renderLine() = 0;
|
||||||
|
|
||||||
|
|
@ -96,6 +98,8 @@ public:
|
||||||
virtual ~RectShape();
|
virtual ~RectShape();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
E2D_DISABLE_COPY(RectShape);
|
||||||
|
|
||||||
// äÖȾÂÖÀª
|
// äÖȾÂÖÀª
|
||||||
virtual void _renderLine() override;
|
virtual void _renderLine() override;
|
||||||
|
|
||||||
|
|
@ -143,6 +147,8 @@ public:
|
||||||
);
|
);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
E2D_DISABLE_COPY(RoundRectShape);
|
||||||
|
|
||||||
// äÖȾÂÖÀª
|
// äÖȾÂÖÀª
|
||||||
virtual void _renderLine() override;
|
virtual void _renderLine() override;
|
||||||
|
|
||||||
|
|
@ -182,6 +188,8 @@ public:
|
||||||
);
|
);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
E2D_DISABLE_COPY(CircleShape);
|
||||||
|
|
||||||
// äÖȾÂÖÀª
|
// äÖȾÂÖÀª
|
||||||
virtual void _renderLine() override;
|
virtual void _renderLine() override;
|
||||||
|
|
||||||
|
|
@ -230,6 +238,8 @@ public:
|
||||||
);
|
);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
E2D_DISABLE_COPY(EllipseShape);
|
||||||
|
|
||||||
// äÖȾÂÖÀª
|
// äÖȾÂÖÀª
|
||||||
virtual void _renderLine() override;
|
virtual void _renderLine() override;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue