我正在尝试快速从其父节点分离节点并附加到另一个节点,以便准确地跟踪父节点的位置。我使用以下代码:
// 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];
然而,我在第二次运行此代码时闪烁,它看起来并不完美。是否有更快的方法从其父节点附加/分离节点?
答案 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;
当然,如果跳蚤和狗在不同的坐标空间,你也需要解决这个问题,但这只是存储参考的基本概念。