菜鸟教程小白 发表于 2022-12-13 03:44:35

ios - SpriteKit - 检测节点是否命中另一个节点子节点并执行操作


                                            <p><p>我有一个 Cat 节点和一个 Bird 节点。鸟节点嵌套在一个称为birdBlock 的容器节点中。一切都包含在 WorldNode 中。如果我将一只鸟添加到 WorldNode,Cat 可以与它​​进行适当的交互,但是当鸟在 birdBlock 中时,Cat 只是将它们推开,它们就会飞起来。</p>

<p>我正在使用以下方法来寻找我的鸟:</p>

<pre><code>[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.
    }
}];
</code></pre>

<p>方 block 中的鸟有正确的名字。</p>

<p>它们现在正在被枚举,但除了在屏幕上飞来飞去之外,它们仍然不与猫互动。</p>

<p>现在我正在这样做:</p>

<pre><code>[ enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop)
{
      SKSpriteNode *blockNode = (SKSpriteNode *)obj;
      if ()
      {
            [blockNode enumerateChildNodesWithName:kBirdName usingBlock:^(SKNode *node, BOOL *stop)
            {
                SKSpriteNode *nbird = (SKSpriteNode *)node;
                NSLog(@&#34;FOUND BIRDS HERE&#34;);

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

                if (CGRectIntersectsRect(nbird.frame, cat.frame))
                {
                  NSLog(@&#34;Hit BIRD&#34;);
                  ;
                }
            }
      }
}];
</code></pre>

<p>所以这也不起作用。如何更改 Sprite 的坐标系?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您可以通过多种方式搜索节点树。 <a href="https://developer.apple.com/Library/ios/documentation/SpriteKit/Reference/SKNode_Ref/index.html" rel="noreferrer noopener nofollow">SKNode documentation</a>在<em>搜索节点树</em>部分清楚地解释了它。</p>

<p>如果您有一个名为 <strong>@"node"</strong> 的节点,那么您可以通过在名称前放置一个 <strong>//</strong> 来搜索所有后代。所以你会搜索 <strong>@"//node"</strong>。</p>

<p>尝试将您的常量 <strong>kBirdName</strong> 更改为等于 <strong>@"//my_bird_name"</strong></p>

<p>使用字符串文字的示例是 -</p>

<pre><code>[worldNode enumerateChildNodesWithName:@&#34;//nodeName&#34; usingBlock:^(SKNode *node, BOOL *stop)
{ // Do stuff here... }
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - SpriteKit - 检测节点是否命中另一个节点子节点并执行操作,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/27297820/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/27297820/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - SpriteKit - 检测节点是否命中另一个节点子节点并执行操作