From cbfaaeb497e35b6e0311c67e0e3843960ddf6d11 Mon Sep 17 00:00:00 2001 From: Nomango <569629550@qq.com> Date: Mon, 9 Oct 2017 10:26:36 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=89=B9=E9=87=8F=E8=8A=82?= =?UTF-8?q?=E7=82=B9=E7=9A=84=E7=A7=BB=E5=8A=A8=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Easy2D/Object/BatchNode.cpp | 74 +++++++++++++++++++++++++++++++++++-- 1 file changed, 70 insertions(+), 4 deletions(-) diff --git a/Easy2D/Object/BatchNode.cpp b/Easy2D/Object/BatchNode.cpp index 1c05f832..066dc29e 100644 --- a/Easy2D/Object/BatchNode.cpp +++ b/Easy2D/Object/BatchNode.cpp @@ -40,12 +40,8 @@ void BatchNode::_onDraw() for (auto child : m_vChildren) { - // 将子节点移动到相对位置 - child->move(getX(), getY()); // 绘制子节点 child->_onDraw(); - // 将子节点移回原位 - child->move(-getX(), -getY()); } } @@ -59,6 +55,8 @@ void BatchNode::add(Node * child, int z_Order) child->setZOrder(z_Order); // 对象的引用计数加一 child->retain(); + // 修改子节点位置 + child->move(getPos()); // 按 z 轴顺序插入节点 size_t size = m_vChildren.size(); @@ -112,3 +110,71 @@ void BatchNode::clearAllChildren() // 清空储存节点的容器 m_vChildren.clear(); } + +void BatchNode::setX(int x) +{ + // 计算相对移动位置 + int var = x - getX(); + // 移动所有子节点的位置 + for (auto child : m_vChildren) + { + child->move(var, 0); + } + Node::setX(x); +} + +void BatchNode::setY(int y) +{ + // 计算相对移动位置 + int var = y - getY(); + // 移动所有子节点的位置 + for (auto child : m_vChildren) + { + child->move(0, var); + } + Node::setX(y); +} + +void BatchNode::setPos(int x, int y) +{ + // 计算相对移动位置 + CPoint var(x - getX(), y - getY()); + // 移动所有子节点的位置 + for (auto child : m_vChildren) + { + child->move(var); + } + Node::setPos(x, y); +} + +void BatchNode::setPos(CPoint p) +{ + // 计算相对移动位置 + CPoint var(p - getPos()); + // 移动所有子节点的位置 + for (auto child : m_vChildren) + { + child->move(var); + } + Node::setPos(p); +} + +void BatchNode::move(int x, int y) +{ + // 移动所有子节点的位置 + for (auto child : m_vChildren) + { + child->move(x, y); + } + Node::setPos(x, y); +} + +void BatchNode::move(CVector v) +{ + // 移动所有子节点的位置 + for (auto child : m_vChildren) + { + child->move(v); + } + Node::setPos(v); +}