2

Cat ノードと Bird ノードがあります。鳥のノードは、birdBlock と呼ばれるコンテナ ノードに入れ子になっています。すべてが WorldNode に含まれています。WorldNode に鳥を追加すると、Cat は鳥と適切に対話できますが、鳥が birdBlock にいる場合、Cat は鳥を邪魔にならないように押しのけて飛んでいきます。

私は自分の鳥を見つけるために以下を使用しています:

[worldNode enumerateChildNodesWithName:kBirdName usingBlock:^(SKNode *node, BOOL *stop)
{
    SKSpriteNode *newBird = (SKSpriteNode *)node;
    if (CGRectIntersectsRect(newBird.frame,cat.frame))
    { 
       //Do Something
       //This is never reached when the birds are in the SKSpriteNode birdBlock. 
       //They just get shoved all over the screen.
    }
}];

ブロック内の鳥は正しい名前を持っています。

それらは現在列挙されていますが、画面を飛び回る以外は猫とやり取りしていません。

今私はこれをやっています:

[[worldNode children] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop)
{
        SKSpriteNode *blockNode = (SKSpriteNode *)obj;
        if ([blockNode.name isEqualToString:kBirdBlockName])
        {
            [blockNode enumerateChildNodesWithName:kBirdName usingBlock:^(SKNode *node, BOOL *stop)
            {
                SKSpriteNode *nbird = (SKSpriteNode *)node;
                NSLog(@"FOUND BIRDS HERE");

                //THIS IS FOUND! But below still does not work

                if (CGRectIntersectsRect(nbird.frame, cat.frame))
                {
                    NSLog(@"Hit BIRD");
                    [nbird removeFromParent];
                }
            }
        }
}];

したがって、これも機能しません。スプライトの座標系を変更するにはどうすればよいですか?

4

2 に答える 2

0

ノード ツリーはさまざまな方法で検索できます。SKNodeのドキュメントでは、セクションSearching the Node Treeで明確に説明されています。

@"node"という名前のノードがある場合、名前の前に//を付けることで、すべての子孫を検索できます。したがって、 @"//node"を検索します。

定数kBirdName@"//my_bird_name"に変更してみてください

文字列リテラルを使用した例は次のようになります -

[worldNode enumerateChildNodesWithName:@"//nodeName" usingBlock:^(SKNode *node, BOOL *stop)
{ // Do stuff here... }
于 2014-12-04T15:45:48.107 に答える