2

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

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

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

欢迎任何帮助提前谢谢你

4

1 回答 1

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];

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

请注意,如果您看到重复的节点,您可以创建一个新节点而不删除旧节点,或者您有两个节点开始。在 cocos2d 中,一个 CCNode 只能有一个父节点,尝试将一个已经有父节点的节点添加到另一个节点会提示错误消息。如果您遇到重复的节点,分别从其父节点中删除一个节点仍将其保留在屏幕上,请首先尝试找出原因。这在正常情况下不会发生,除非您实际创建同一节点的多个版本。

于 2012-07-07T11:21:25.767 回答