如何从父节点分离节点并附加到SpriteKit中的另一个节点

时间:2014-05-07 17:11:07

标签: ios7 sprite-kit

我正在尝试快速从其父节点分离节点并附加到另一个节点,以便准确地跟踪父节点的位置。我使用以下代码:

    // detach from parent
    [_player removeFromParent];

    // attach back to world node, at the same visual location, before taking action
    [_player setCenterPosition: CGPointMake(newPosX,newPosY)];   
    [_worldNode addChild:_player];

然而,我在第二次运行此代码时闪烁,它看起来并不完美。是否有更快的方法从其父节点附加/分离节点?

2 个答案:

答案 0 :(得分:2)

您不能将孩子从一个父母转移到另一个父母。您唯一的选择是从父节点中删除节点并添加到另一个父节点,正如您已经想到的那样,它会创建一个开/关效果。

除了更改游戏逻辑以防止必须为您的节点切换父节点之外,您无法对闪烁做些什么。

答案 1 :(得分:0)

回到这个问题,直到现在才在评论中看到你的回复。

您在评论中的澄清应该添加到问题中:

“有什么更好的方法可以将一个节点”附加“到另一个节点,假设在这种情况下使用”关节“无效?”

您可以使用的一个概念是子类化并创建一个iVar或属性,您可以在其中存储对要将其附加到的对象的引用。

没有子类化的替代方法是将该引用存储在节点的userData属性中。

然后在更新每个帧期间,您可以使用该引用将给定节点位置更新为其所需的父节点。

这是一个使用狗的跳蚤的例子,存储在userData

flea.userData = [[NSMutableDictionary alloc]init];
[flea.userData setObject:dog forKey:@"parent"];

然后在处理跳蚤时的更新中,你会这样做:

SKNode *fleaParent = [flea.userdata valueForKey:@"parent"];
flea.position = fleaParent.position;

当然,如果跳蚤和狗在不同的坐标空间,你也需要解决这个问题,但这只是存储参考的基本概念。