Collider::Type改为Collider::Shape;增加节点变化差值。
This commit is contained in:
parent
0c6044491e
commit
2ac7ac6591
|
|
@ -8,9 +8,9 @@ e2d::Collider::Collider(Node * parent)
|
||||||
, _parentNode(parent)
|
, _parentNode(parent)
|
||||||
, _geometry(nullptr)
|
, _geometry(nullptr)
|
||||||
, _enabled(true)
|
, _enabled(true)
|
||||||
, _type(Collider::Type::None)
|
, _shape(Collider::Shape::None)
|
||||||
{
|
{
|
||||||
_type = Game::getInstance()->getConfig()->getDefaultColliderType();
|
_shape = Game::getInstance()->getConfig()->getDefaultColliderShape();
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::Collider::~Collider()
|
e2d::Collider::~Collider()
|
||||||
|
|
@ -23,11 +23,22 @@ e2d::Color e2d::Collider::getColor() const
|
||||||
return _color;
|
return _color;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
e2d::Collider::Shape e2d::Collider::getShape() const
|
||||||
|
{
|
||||||
|
return _shape;
|
||||||
|
}
|
||||||
|
|
||||||
ID2D1Geometry * e2d::Collider::getGeometry() const
|
ID2D1Geometry * e2d::Collider::getGeometry() const
|
||||||
{
|
{
|
||||||
return _geometry;
|
return _geometry;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void e2d::Collider::setShape(Shape shape)
|
||||||
|
{
|
||||||
|
_shape = shape;
|
||||||
|
this->_recreate();
|
||||||
|
}
|
||||||
|
|
||||||
void e2d::Collider::setEnabled(bool enabled)
|
void e2d::Collider::setEnabled(bool enabled)
|
||||||
{
|
{
|
||||||
_enabled = enabled;
|
_enabled = enabled;
|
||||||
|
|
@ -81,12 +92,12 @@ void e2d::Collider::_recreate()
|
||||||
{
|
{
|
||||||
SafeRelease(_geometry);
|
SafeRelease(_geometry);
|
||||||
|
|
||||||
if (_type == Type::None)
|
if (!_enabled || _shape == Shape::None)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
switch (_type)
|
switch (_shape)
|
||||||
{
|
{
|
||||||
case Type::Rect:
|
case Shape::Rect:
|
||||||
{
|
{
|
||||||
ID2D1RectangleGeometry* rectangle = nullptr;
|
ID2D1RectangleGeometry* rectangle = nullptr;
|
||||||
Renderer::getFactory()->CreateRectangleGeometry(
|
Renderer::getFactory()->CreateRectangleGeometry(
|
||||||
|
|
@ -101,7 +112,7 @@ void e2d::Collider::_recreate()
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Type::Circle:
|
case Shape::Circle:
|
||||||
{
|
{
|
||||||
double minSide = std::min(_parentNode->getRealWidth(), _parentNode->getRealHeight());
|
double minSide = std::min(_parentNode->getRealWidth(), _parentNode->getRealHeight());
|
||||||
|
|
||||||
|
|
@ -121,7 +132,7 @@ void e2d::Collider::_recreate()
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Type::Ellipse:
|
case Shape::Ellipse:
|
||||||
{
|
{
|
||||||
float halfWidth = float(_parentNode->getWidth() / 2),
|
float halfWidth = float(_parentNode->getWidth() / 2),
|
||||||
halfHeight = float(_parentNode->getHeight() / 2);
|
halfHeight = float(_parentNode->getHeight() / 2);
|
||||||
|
|
|
||||||
|
|
@ -3,12 +3,12 @@
|
||||||
|
|
||||||
e2d::Config::Config()
|
e2d::Config::Config()
|
||||||
: _gameName()
|
: _gameName()
|
||||||
, _nodeDefPivot()
|
, _defaultNodePivot()
|
||||||
, _soundEnabled(true)
|
, _soundEnabled(true)
|
||||||
, _outlineVisible(false)
|
, _outlineVisible(false)
|
||||||
, _collisionEnabled(false)
|
, _collisionEnabled(false)
|
||||||
, _colliderVisible(false)
|
, _colliderVisible(false)
|
||||||
, _nodeDefColliderType(Collider::Type::None)
|
, _defaultColliderShape(Collider::Shape::None)
|
||||||
, _unconfigured(true)
|
, _unconfigured(true)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
@ -43,15 +43,15 @@ void e2d::Config::setCollisionEnabled(bool enabled)
|
||||||
|
|
||||||
void e2d::Config::setNodeDefaultPivot(Point pivot)
|
void e2d::Config::setNodeDefaultPivot(Point pivot)
|
||||||
{
|
{
|
||||||
_nodeDefPivot = Point(
|
_defaultNodePivot = Point(
|
||||||
std::min(std::max(pivot.x, 0.0), 1.0),
|
std::min(std::max(pivot.x, 0.0), 1.0),
|
||||||
std::min(std::max(pivot.y, 0.0), 1.0)
|
std::min(std::max(pivot.y, 0.0), 1.0)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::Config::setDefaultColliderType(Collider::Type type)
|
void e2d::Config::setDefaultColliderShape(Collider::Shape shape)
|
||||||
{
|
{
|
||||||
_nodeDefColliderType = type;
|
_defaultColliderShape = shape;
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::Config::setColliderVisible(bool visible)
|
void e2d::Config::setColliderVisible(bool visible)
|
||||||
|
|
@ -81,12 +81,12 @@ bool e2d::Config::isCollisionEnabled() const
|
||||||
|
|
||||||
e2d::Point e2d::Config::getNodeDefaultPivot() const
|
e2d::Point e2d::Config::getNodeDefaultPivot() const
|
||||||
{
|
{
|
||||||
return _nodeDefPivot;
|
return _defaultNodePivot;
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::Collider::Type e2d::Config::getDefaultColliderType() const
|
e2d::Collider::Shape e2d::Config::getDefaultColliderShape() const
|
||||||
{
|
{
|
||||||
return _nodeDefColliderType;
|
return _defaultColliderShape;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool e2d::Config::isColliderVisible() const
|
bool e2d::Config::isColliderVisible() const
|
||||||
|
|
|
||||||
|
|
@ -47,7 +47,7 @@ void e2d::CollisionManager::updateCollider(Node * node)
|
||||||
{
|
{
|
||||||
if (node)
|
if (node)
|
||||||
{
|
{
|
||||||
if (node->getCollider()->_type != Collider::Type::None)
|
if (node->getCollider()->_shape != Collider::Shape::None)
|
||||||
{
|
{
|
||||||
node->getCollider()->_recreate();
|
node->getCollider()->_recreate();
|
||||||
_collisionNodes.insert(node);
|
_collisionNodes.insert(node);
|
||||||
|
|
|
||||||
|
|
@ -3,9 +3,45 @@
|
||||||
#include "..\e2daction.h"
|
#include "..\e2daction.h"
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
|
const e2d::Node::Property e2d::Node::Property::Origin = { 0 };
|
||||||
|
|
||||||
|
e2d::Node::Property e2d::Node::Property::operator+(Property const & prop) const
|
||||||
|
{
|
||||||
|
Property result;
|
||||||
|
result.posX = this->posX + prop.posX;
|
||||||
|
result.posY = this->posY + prop.posY;
|
||||||
|
result.width = this->width + prop.width;
|
||||||
|
result.height = this->height + prop.height;
|
||||||
|
result.pivotX = this->pivotX + prop.pivotX;
|
||||||
|
result.pivotY = this->pivotY + prop.pivotY;
|
||||||
|
result.scaleX = this->scaleX + prop.scaleX;
|
||||||
|
result.scaleY = this->scaleY + prop.scaleY;
|
||||||
|
result.rotation = this->rotation + prop.rotation;
|
||||||
|
result.skewAngleX = this->skewAngleX + prop.skewAngleX;
|
||||||
|
result.skewAngleY = this->skewAngleY + prop.skewAngleY;
|
||||||
|
return std::move(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
e2d::Node::Property e2d::Node::Property::operator-(Property const & prop) const
|
||||||
|
{
|
||||||
|
Property result;
|
||||||
|
result.posX = this->posX - prop.posX;
|
||||||
|
result.posY = this->posY - prop.posY;
|
||||||
|
result.width = this->width - prop.width;
|
||||||
|
result.height = this->height - prop.height;
|
||||||
|
result.pivotX = this->pivotX - prop.pivotX;
|
||||||
|
result.pivotY = this->pivotY - prop.pivotY;
|
||||||
|
result.scaleX = this->scaleX - prop.scaleX;
|
||||||
|
result.scaleY = this->scaleY - prop.scaleY;
|
||||||
|
result.rotation = this->rotation - prop.rotation;
|
||||||
|
result.skewAngleX = this->skewAngleX - prop.skewAngleX;
|
||||||
|
result.skewAngleY = this->skewAngleY - prop.skewAngleY;
|
||||||
|
return std::move(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
e2d::Node::Node()
|
e2d::Node::Node()
|
||||||
: _nOrder(0)
|
: _order(0)
|
||||||
, _posX(0)
|
, _posX(0)
|
||||||
, _posY(0)
|
, _posY(0)
|
||||||
, _width(0)
|
, _width(0)
|
||||||
|
|
@ -31,6 +67,7 @@ e2d::Node::Node()
|
||||||
, _positionFixed(false)
|
, _positionFixed(false)
|
||||||
, _outline(nullptr)
|
, _outline(nullptr)
|
||||||
, _collider(this)
|
, _collider(this)
|
||||||
|
, _extrapolate(Property::Origin)
|
||||||
{
|
{
|
||||||
// ÉèÖÃĬÈÏÖÐÐĵãλÖÃ
|
// ÉèÖÃĬÈÏÖÐÐĵãλÖÃ
|
||||||
Point defPivot = Game::getInstance()->getConfig()->getNodeDefaultPivot();
|
Point defPivot = Game::getInstance()->getConfig()->getNodeDefaultPivot();
|
||||||
|
|
@ -374,12 +411,10 @@ double e2d::Node::getOpacity() const
|
||||||
e2d::Node::Property e2d::Node::getProperty() const
|
e2d::Node::Property e2d::Node::getProperty() const
|
||||||
{
|
{
|
||||||
Property prop;
|
Property prop;
|
||||||
prop.visible = _visible;
|
|
||||||
prop.posX = _posX;
|
prop.posX = _posX;
|
||||||
prop.posY = _posY;
|
prop.posY = _posY;
|
||||||
prop.width = _width;
|
prop.width = _width;
|
||||||
prop.height = _height;
|
prop.height = _height;
|
||||||
prop.opacity = _realOpacity;
|
|
||||||
prop.pivotX = _pivotX;
|
prop.pivotX = _pivotX;
|
||||||
prop.pivotY = _pivotY;
|
prop.pivotY = _pivotY;
|
||||||
prop.scaleX = _scaleX;
|
prop.scaleX = _scaleX;
|
||||||
|
|
@ -387,7 +422,7 @@ e2d::Node::Property e2d::Node::getProperty() const
|
||||||
prop.rotation = _rotation;
|
prop.rotation = _rotation;
|
||||||
prop.skewAngleX = _skewAngleX;
|
prop.skewAngleX = _skewAngleX;
|
||||||
prop.skewAngleY = _skewAngleY;
|
prop.skewAngleY = _skewAngleY;
|
||||||
return prop;
|
return std::move(prop);
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::Collider* e2d::Node::getCollider()
|
e2d::Collider* e2d::Node::getCollider()
|
||||||
|
|
@ -397,12 +432,12 @@ e2d::Collider* e2d::Node::getCollider()
|
||||||
|
|
||||||
int e2d::Node::getOrder() const
|
int e2d::Node::getOrder() const
|
||||||
{
|
{
|
||||||
return _nOrder;
|
return _order;
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::Node::setOrder(int order)
|
void e2d::Node::setOrder(int order)
|
||||||
{
|
{
|
||||||
_nOrder = order;
|
_order = order;
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::Node::setPosX(double x)
|
void e2d::Node::setPosX(double x)
|
||||||
|
|
@ -427,6 +462,8 @@ void e2d::Node::setPos(double x, double y)
|
||||||
|
|
||||||
_posX = float(x);
|
_posX = float(x);
|
||||||
_posY = float(y);
|
_posY = float(y);
|
||||||
|
_extrapolate.posX += x;
|
||||||
|
_extrapolate.posY += y;
|
||||||
_needTransform = true;
|
_needTransform = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -481,6 +518,8 @@ void e2d::Node::setScale(double scaleX, double scaleY)
|
||||||
|
|
||||||
_scaleX = float(scaleX);
|
_scaleX = float(scaleX);
|
||||||
_scaleY = float(scaleY);
|
_scaleY = float(scaleY);
|
||||||
|
_extrapolate.scaleX += scaleX;
|
||||||
|
_extrapolate.scaleY += scaleY;
|
||||||
_needTransform = true;
|
_needTransform = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -501,6 +540,8 @@ void e2d::Node::setSkew(double angleX, double angleY)
|
||||||
|
|
||||||
_skewAngleX = float(angleX);
|
_skewAngleX = float(angleX);
|
||||||
_skewAngleY = float(angleY);
|
_skewAngleY = float(angleY);
|
||||||
|
_extrapolate.skewAngleX += angleX;
|
||||||
|
_extrapolate.skewAngleY += angleY;
|
||||||
_needTransform = true;
|
_needTransform = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -510,6 +551,7 @@ void e2d::Node::setRotation(double angle)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
_rotation = float(angle);
|
_rotation = float(angle);
|
||||||
|
_extrapolate.rotation += angle;
|
||||||
_needTransform = true;
|
_needTransform = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -540,6 +582,8 @@ void e2d::Node::setPivot(double pivotX, double pivotY)
|
||||||
|
|
||||||
_pivotX = std::min(std::max(float(pivotX), 0.f), 1.f);
|
_pivotX = std::min(std::max(float(pivotX), 0.f), 1.f);
|
||||||
_pivotY = std::min(std::max(float(pivotY), 0.f), 1.f);
|
_pivotY = std::min(std::max(float(pivotY), 0.f), 1.f);
|
||||||
|
_extrapolate.pivotX += pivotX;
|
||||||
|
_extrapolate.pivotY += pivotY;
|
||||||
_needTransform = true;
|
_needTransform = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -560,6 +604,8 @@ void e2d::Node::setSize(double width, double height)
|
||||||
|
|
||||||
_width = float(width);
|
_width = float(width);
|
||||||
_height = float(height);
|
_height = float(height);
|
||||||
|
_extrapolate.width += width;
|
||||||
|
_extrapolate.height += height;
|
||||||
_needTransform = true;
|
_needTransform = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -570,25 +616,14 @@ void e2d::Node::setSize(Size size)
|
||||||
|
|
||||||
void e2d::Node::setProperty(Property prop)
|
void e2d::Node::setProperty(Property prop)
|
||||||
{
|
{
|
||||||
this->setVisible(prop.visible);
|
|
||||||
this->setPos(prop.posX, prop.posY);
|
this->setPos(prop.posX, prop.posY);
|
||||||
this->setSize(prop.width, prop.height);
|
this->setSize(prop.width, prop.height);
|
||||||
this->setOpacity(prop.opacity);
|
|
||||||
this->setPivot(prop.pivotX, prop.pivotY);
|
this->setPivot(prop.pivotX, prop.pivotY);
|
||||||
this->setScale(prop.scaleX, prop.scaleY);
|
this->setScale(prop.scaleX, prop.scaleY);
|
||||||
this->setRotation(prop.rotation);
|
this->setRotation(prop.rotation);
|
||||||
this->setSkew(prop.skewAngleX, prop.skewAngleY);
|
this->setSkew(prop.skewAngleX, prop.skewAngleY);
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::Node::setColliderType(Collider::Type type)
|
|
||||||
{
|
|
||||||
if (_collider._type != type)
|
|
||||||
{
|
|
||||||
_collider._type = type;
|
|
||||||
_needTransform = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void e2d::Node::addChild(Node * child, int order /* = 0 */)
|
void e2d::Node::addChild(Node * child, int order /* = 0 */)
|
||||||
{
|
{
|
||||||
WARN_IF(child == nullptr, "Node::addChild NULL pointer exception.");
|
WARN_IF(child == nullptr, "Node::addChild NULL pointer exception.");
|
||||||
|
|
|
||||||
|
|
@ -450,8 +450,8 @@ class Collider
|
||||||
friend class CollisionManager;
|
friend class CollisionManager;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// 碰撞体类别
|
// 碰撞体形状
|
||||||
enum class Type
|
enum class Shape
|
||||||
{
|
{
|
||||||
None, /* 无 */
|
None, /* 无 */
|
||||||
Rect, /* 矩形 */
|
Rect, /* 矩形 */
|
||||||
|
|
@ -470,6 +470,11 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
// 设置碰撞体形状
|
||||||
|
virtual void setShape(
|
||||||
|
Shape shape
|
||||||
|
);
|
||||||
|
|
||||||
// 启用或关闭该碰撞体
|
// 启用或关闭该碰撞体
|
||||||
virtual void setEnabled(
|
virtual void setEnabled(
|
||||||
bool enabled
|
bool enabled
|
||||||
|
|
@ -493,6 +498,9 @@ public:
|
||||||
// 获取绘制颜色
|
// 获取绘制颜色
|
||||||
Color getColor() const;
|
Color getColor() const;
|
||||||
|
|
||||||
|
// 获取形状
|
||||||
|
Shape getShape() const;
|
||||||
|
|
||||||
// 获取 ID2D1Geometry* 对象
|
// 获取 ID2D1Geometry* 对象
|
||||||
ID2D1Geometry* getGeometry() const;
|
ID2D1Geometry* getGeometry() const;
|
||||||
|
|
||||||
|
|
@ -516,7 +524,7 @@ protected:
|
||||||
bool _visible;
|
bool _visible;
|
||||||
Color _color;
|
Color _color;
|
||||||
Node * _parentNode;
|
Node * _parentNode;
|
||||||
Type _type;
|
Shape _shape;
|
||||||
ID2D1Geometry* _geometry;
|
ID2D1Geometry* _geometry;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -797,10 +805,10 @@ public:
|
||||||
Point pivot
|
Point pivot
|
||||||
);
|
);
|
||||||
|
|
||||||
// 设置节点的默认碰撞体类型
|
// 设置节点的默认碰撞体形状
|
||||||
// 默认:Collider::Type::None
|
// 默认:Collider::Shape::None
|
||||||
void setDefaultColliderType(
|
void setDefaultColliderShape(
|
||||||
Collider::Type type
|
Collider::Shape shape
|
||||||
);
|
);
|
||||||
|
|
||||||
// 打开或关闭碰撞体可视化
|
// 打开或关闭碰撞体可视化
|
||||||
|
|
@ -825,7 +833,7 @@ public:
|
||||||
Point getNodeDefaultPivot() const;
|
Point getNodeDefaultPivot() const;
|
||||||
|
|
||||||
// 获取节点的默认碰撞体类型
|
// 获取节点的默认碰撞体类型
|
||||||
Collider::Type getDefaultColliderType() const;
|
Collider::Shape getDefaultColliderShape() const;
|
||||||
|
|
||||||
// 获取碰撞体可视化状态
|
// 获取碰撞体可视化状态
|
||||||
bool isColliderVisible() const;
|
bool isColliderVisible() const;
|
||||||
|
|
@ -840,8 +848,8 @@ protected:
|
||||||
bool _collisionEnabled;
|
bool _collisionEnabled;
|
||||||
bool _colliderVisible;
|
bool _colliderVisible;
|
||||||
String _gameName;
|
String _gameName;
|
||||||
Point _nodeDefPivot;
|
Point _defaultNodePivot;
|
||||||
Collider::Type _nodeDefColliderType;
|
Collider::Shape _defaultColliderShape;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -19,12 +19,10 @@ public:
|
||||||
// 节点属性
|
// 节点属性
|
||||||
struct Property
|
struct Property
|
||||||
{
|
{
|
||||||
bool visible; // 可见性
|
|
||||||
double posX; // X 坐标
|
double posX; // X 坐标
|
||||||
double posY; // Y 坐标
|
double posY; // Y 坐标
|
||||||
double width; // 宽度
|
double width; // 宽度
|
||||||
double height; // 高度
|
double height; // 高度
|
||||||
double opacity; // 透明度
|
|
||||||
double pivotX; // 中心点 X 坐标
|
double pivotX; // 中心点 X 坐标
|
||||||
double pivotY; // 中心点 Y 坐标
|
double pivotY; // 中心点 Y 坐标
|
||||||
double scaleX; // 横向缩放
|
double scaleX; // 横向缩放
|
||||||
|
|
@ -32,6 +30,11 @@ public:
|
||||||
double rotation; // 旋转角度
|
double rotation; // 旋转角度
|
||||||
double skewAngleX; // 横向倾斜角度
|
double skewAngleX; // 横向倾斜角度
|
||||||
double skewAngleY; // 纵向倾斜角度
|
double skewAngleY; // 纵向倾斜角度
|
||||||
|
|
||||||
|
Property operator+ (Property const & prop) const;
|
||||||
|
Property operator- (Property const & prop) const;
|
||||||
|
|
||||||
|
static const Property Origin;
|
||||||
};
|
};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
@ -331,11 +334,6 @@ public:
|
||||||
Property prop
|
Property prop
|
||||||
);
|
);
|
||||||
|
|
||||||
// 设置碰撞体类型
|
|
||||||
virtual void setColliderType(
|
|
||||||
Collider::Type type
|
|
||||||
);
|
|
||||||
|
|
||||||
// 添加子节点
|
// 添加子节点
|
||||||
virtual void addChild(
|
virtual void addChild(
|
||||||
Node * child,
|
Node * child,
|
||||||
|
|
@ -425,7 +423,7 @@ protected:
|
||||||
float _realOpacity;
|
float _realOpacity;
|
||||||
float _pivotX;
|
float _pivotX;
|
||||||
float _pivotY;
|
float _pivotY;
|
||||||
int _nOrder;
|
int _order;
|
||||||
bool _visible;
|
bool _visible;
|
||||||
bool _autoUpdate;
|
bool _autoUpdate;
|
||||||
bool _needSort;
|
bool _needSort;
|
||||||
|
|
@ -434,6 +432,7 @@ protected:
|
||||||
Collider _collider;
|
Collider _collider;
|
||||||
Scene * _parentScene;
|
Scene * _parentScene;
|
||||||
Node * _parent;
|
Node * _parent;
|
||||||
|
Property _extrapolate;
|
||||||
ID2D1Geometry* _outline;
|
ID2D1Geometry* _outline;
|
||||||
D2D1::Matrix3x2F _initialMatri;
|
D2D1::Matrix3x2F _initialMatri;
|
||||||
D2D1::Matrix3x2F _finalMatri;
|
D2D1::Matrix3x2F _finalMatri;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue