在cocos2D中更改CCSprite的父级

Osc*_*car 2 iphone parent cocos2d-iphone ccsprite

我是cocos2Dm的新手,我面临着一个我无法解决的问题到目前为止我在图层中有2个精灵(让我们称之为表格),这是可触摸的,其中一个添加了其他精灵,我想从一张桌子移动到另一张桌子,我正在识别我触摸的对象,然后移动它们,我的问题是我无法将父级更改为另一个表格,我试图从父级中移除对象以不同的方式添加没有新的父,但它似乎不起作用,对象是重复的,因为它没有被删除,我甚至试图删除它,当我触摸它.我将对象存储在_objectsToDrag中并在touchbegan中调用此函数:

- (void) lookForObjectWithTouchLocation:(CGPoint)touchLocation
{
    for (RICCObject *object in _objectsToDrag) {
        if (CGRectContainsPoint(object.boundingBox, touchLocation)) { 
            _selectedObject = object;
        }
    }
    if (_selectedObject) {
        [self objectSelectedWithLocation:touchLocation];
    }
}
Run Code Online (Sandbox Code Playgroud)

然后使用_selectedObject移动它,这是问题吗?我应该使用aributes而不是数组中的本地对象吗?

欢迎任何帮助提前谢谢

Lea*_*s2D 5

要将从CCNode派生的类的实例(如CCSprite,CCLabelTTF等)从一个父节点移动到另一个父节点,请遵循以下过程:

// get yourNode in whatever way fits your implementation ...
CCNode* nodeToMove = yourNode;
// not cleaning up leaves actions running
[nodeToMove removeFromParentAndCleanup:NO];
// add the removed node to its new parent node
[newParentNode addChild:nodeToMove];
Run Code Online (Sandbox Code Playgroud)

无论您存储节点的方式或位置如何,此过程都有效.

请注意,如果您看到节点是重复的,则可以创建新节点而不删除旧节点,也可以开始使用两个节点.在cocos2d中,CCNode只能有一个父节点,并且尝试将已有父节点的节点添加到另一个节点将提示您输入错误消息.如果您遇到重复节点,分别从其父节点删除节点仍然保持在屏幕上尝试找到该节点的原因.这是在正常情况下不会发生的事情,除非您实际创建同一节点的多个版本.