Collider内部实现细节调整
This commit is contained in:
parent
2c0f7c5178
commit
bc4aa3eee5
|
|
@ -2,18 +2,15 @@
|
|||
#include "..\e2dnode.h"
|
||||
|
||||
e2d::CircleCollider::CircleCollider()
|
||||
: _d2dCircle(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::CircleCollider::CircleCollider(Point center, double radius)
|
||||
: _d2dCircle(nullptr)
|
||||
{
|
||||
this->setCircle(center, radius);
|
||||
}
|
||||
|
||||
e2d::CircleCollider::CircleCollider(Node * node)
|
||||
: _d2dCircle(nullptr)
|
||||
{
|
||||
double minSide = std::min(node->getRealWidth(), node->getRealHeight());
|
||||
this->setCircle(
|
||||
|
|
@ -28,22 +25,26 @@ e2d::CircleCollider::CircleCollider(Node * node)
|
|||
|
||||
e2d::CircleCollider::~CircleCollider()
|
||||
{
|
||||
SafeRelease(_d2dCircle);
|
||||
}
|
||||
|
||||
void e2d::CircleCollider::setCircle(Point center, double radius)
|
||||
{
|
||||
SafeRelease(_d2dCircle);
|
||||
SafeRelease(_geometry);
|
||||
|
||||
ID2D1EllipseGeometry* circle = nullptr;
|
||||
Renderer::getFactory()->CreateEllipseGeometry(
|
||||
D2D1::Ellipse(
|
||||
D2D1::Point2F(
|
||||
float(center.x),
|
||||
float(center.y)),
|
||||
float(center.y)
|
||||
),
|
||||
float(radius),
|
||||
float(radius)),
|
||||
&_d2dCircle
|
||||
float(radius)
|
||||
),
|
||||
&circle
|
||||
);
|
||||
|
||||
_geometry = circle;
|
||||
}
|
||||
|
||||
void e2d::CircleCollider::_resize()
|
||||
|
|
@ -60,8 +61,3 @@ void e2d::CircleCollider::_resize()
|
|||
);
|
||||
}
|
||||
}
|
||||
|
||||
ID2D1EllipseGeometry * e2d::CircleCollider::getD2dGeometry() const
|
||||
{
|
||||
return _d2dCircle;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ e2d::Collider::Collider()
|
|||
, _color(Color::Red, 0.7)
|
||||
, _parentNode(nullptr)
|
||||
, _transformed(nullptr)
|
||||
, _geometry(nullptr)
|
||||
, _enabled(true)
|
||||
, _autoResize(false)
|
||||
{
|
||||
|
|
@ -15,6 +16,7 @@ e2d::Collider::Collider()
|
|||
e2d::Collider::~Collider()
|
||||
{
|
||||
SafeRelease(_transformed);
|
||||
SafeRelease(_geometry);
|
||||
}
|
||||
|
||||
e2d::Node * e2d::Collider::getParentNode() const
|
||||
|
|
@ -83,7 +85,7 @@ e2d::Collider::Relation e2d::Collider::getRelationWith(Collider * pCollider) con
|
|||
|
||||
void e2d::Collider::_transform()
|
||||
{
|
||||
if (_parentNode && _enabled)
|
||||
if (_parentNode && _enabled && _geometry)
|
||||
{
|
||||
if (_autoResize)
|
||||
{
|
||||
|
|
@ -95,11 +97,15 @@ void e2d::Collider::_transform()
|
|||
|
||||
// 根据父节点转换几何图形
|
||||
Renderer::getFactory()->CreateTransformedGeometry(
|
||||
getD2dGeometry(),
|
||||
_geometry,
|
||||
_parentNode->_finalMatri,
|
||||
&_transformed
|
||||
);
|
||||
|
||||
ColliderManager::__updateCollider(this);
|
||||
}
|
||||
else
|
||||
{
|
||||
SafeRelease(_transformed);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,18 +2,15 @@
|
|||
#include "..\e2dnode.h"
|
||||
|
||||
e2d::EllipseCollider::EllipseCollider()
|
||||
: _d2dEllipse(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::EllipseCollider::EllipseCollider(Point center, double radiusX, double radiusY)
|
||||
: _d2dEllipse(nullptr)
|
||||
{
|
||||
this->setEllipse(center, radiusX, radiusY);
|
||||
}
|
||||
|
||||
e2d::EllipseCollider::EllipseCollider(Node * node)
|
||||
: _d2dEllipse(nullptr)
|
||||
{
|
||||
this->setEllipse(
|
||||
Point(
|
||||
|
|
@ -28,13 +25,13 @@ e2d::EllipseCollider::EllipseCollider(Node * node)
|
|||
|
||||
e2d::EllipseCollider::~EllipseCollider()
|
||||
{
|
||||
SafeRelease(_d2dEllipse);
|
||||
}
|
||||
|
||||
void e2d::EllipseCollider::setEllipse(Point center, double radiusX, double radiusY)
|
||||
{
|
||||
SafeRelease(_d2dEllipse);
|
||||
SafeRelease(_geometry);
|
||||
|
||||
ID2D1EllipseGeometry* ellipse = nullptr;
|
||||
Renderer::getFactory()->CreateEllipseGeometry(
|
||||
D2D1::Ellipse(
|
||||
D2D1::Point2F(
|
||||
|
|
@ -42,8 +39,9 @@ void e2d::EllipseCollider::setEllipse(Point center, double radiusX, double radiu
|
|||
float(center.y)),
|
||||
float(radiusX),
|
||||
float(radiusY)),
|
||||
&_d2dEllipse
|
||||
&ellipse
|
||||
);
|
||||
_geometry = ellipse;
|
||||
}
|
||||
|
||||
void e2d::EllipseCollider::_resize()
|
||||
|
|
@ -60,8 +58,3 @@ void e2d::EllipseCollider::_resize()
|
|||
);
|
||||
}
|
||||
}
|
||||
|
||||
ID2D1EllipseGeometry * e2d::EllipseCollider::getD2dGeometry() const
|
||||
{
|
||||
return _d2dEllipse;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,18 +2,15 @@
|
|||
#include "..\e2dnode.h"
|
||||
|
||||
e2d::RectCollider::RectCollider()
|
||||
: _d2dRectangle(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::RectCollider::RectCollider(double x, double y, double width, double height)
|
||||
: _d2dRectangle(nullptr)
|
||||
{
|
||||
this->setRect(x, y, x + width, y + height);
|
||||
}
|
||||
|
||||
e2d::RectCollider::RectCollider(Node * node)
|
||||
: _d2dRectangle(nullptr)
|
||||
{
|
||||
this->setRect(0, 0, node->getRealWidth(), node->getRealHeight());
|
||||
this->setAutoResize(true);
|
||||
|
|
@ -21,21 +18,23 @@ e2d::RectCollider::RectCollider(Node * node)
|
|||
|
||||
e2d::RectCollider::~RectCollider()
|
||||
{
|
||||
SafeRelease(_d2dRectangle);
|
||||
}
|
||||
|
||||
void e2d::RectCollider::setRect(double left, double top, double right, double bottom)
|
||||
{
|
||||
SafeRelease(_d2dRectangle);
|
||||
SafeRelease(_geometry);
|
||||
|
||||
ID2D1RectangleGeometry* rectangle = nullptr;
|
||||
Renderer::getFactory()->CreateRectangleGeometry(
|
||||
D2D1::RectF(
|
||||
float(left),
|
||||
float(top),
|
||||
float(right),
|
||||
float(bottom)),
|
||||
&_d2dRectangle
|
||||
&rectangle
|
||||
);
|
||||
|
||||
_geometry = rectangle;
|
||||
}
|
||||
|
||||
void e2d::RectCollider::_resize()
|
||||
|
|
@ -45,8 +44,3 @@ void e2d::RectCollider::_resize()
|
|||
this->setRect(0, 0, _parentNode->getRealWidth(), _parentNode->getRealHeight());
|
||||
}
|
||||
}
|
||||
|
||||
ID2D1RectangleGeometry * e2d::RectCollider::getD2dGeometry() const
|
||||
{
|
||||
return _d2dRectangle;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -186,9 +186,6 @@ public:
|
|||
bool enabled
|
||||
);
|
||||
|
||||
// 获取 ID2D1Geometry 对象
|
||||
virtual ID2D1Geometry * getD2dGeometry() const = 0;
|
||||
|
||||
protected:
|
||||
// 转换碰撞体
|
||||
virtual void _transform();
|
||||
|
|
@ -205,7 +202,8 @@ protected:
|
|||
bool _autoResize;
|
||||
Color _color;
|
||||
Node * _parentNode;
|
||||
ID2D1TransformedGeometry * _transformed;
|
||||
ID2D1Geometry* _geometry;
|
||||
ID2D1TransformedGeometry* _transformed;
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -237,15 +235,9 @@ public:
|
|||
double bottom
|
||||
);
|
||||
|
||||
// 获取 ID2D1Geometry 对象
|
||||
virtual ID2D1RectangleGeometry * getD2dGeometry() const override;
|
||||
|
||||
protected:
|
||||
// 重设大小
|
||||
virtual void _resize();
|
||||
|
||||
protected:
|
||||
ID2D1RectangleGeometry * _d2dRectangle;
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -273,15 +265,9 @@ public:
|
|||
double radius
|
||||
);
|
||||
|
||||
// 获取 ID2D1Geometry 对象
|
||||
virtual ID2D1EllipseGeometry * getD2dGeometry() const override;
|
||||
|
||||
protected:
|
||||
// 重设大小
|
||||
virtual void _resize();
|
||||
|
||||
protected:
|
||||
ID2D1EllipseGeometry * _d2dCircle;
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -311,15 +297,9 @@ public:
|
|||
double radiusY
|
||||
);
|
||||
|
||||
// 获取 ID2D1Geometry 对象
|
||||
virtual ID2D1EllipseGeometry * getD2dGeometry() const override;
|
||||
|
||||
protected:
|
||||
// 重设大小
|
||||
virtual void _resize();
|
||||
|
||||
protected:
|
||||
ID2D1EllipseGeometry * _d2dEllipse;
|
||||
};
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue