我正在使用 spriteKit (objective-C) 构建一个应用程序,并且我正在使用 intersectsNode 来判断玩家绘制的线是否与游戏板上的字母图块发生碰撞。我的程序中有另一个 intersectsNode 实例,它运行良好,但由于某种原因,这个新场景总是返回 false。我检查了参数,spriteKit 唯一说的是确保它们都是同一棵树的子节点,它们肯定是(自己)。一个是 SKSpriteNode,另一个是 SKShapeNode。

if (directionIsDecided == TRUE) {
    for (letterTile in letterTileArray) {
        if ([letterTile intersectsNode:selectorLine]) {
            [lettersToBeCalculatedForPoints addObject:letterTile];
        }
    }
}

希望我没有忽略一些愚蠢的事情......有什么想法可能导致这个函数永远不会返回true?

*编辑

好吧,我认为这与我如何画线有关。我改变了它,所以它检测到与板上产生的元音的碰撞,每个元音都是 letterTile 的一个 child ,现在它告诉我所有的元音都与 selecorLine 发生碰撞,即使它没有触及任何一个他们。

这就是我创建 selectorLine 的方式:

执行:
    CGMutablePathRef pathToDraw;
    SKShapeNode *selectorLine;

接触开始:
   UITouch* touch = [touches anyObject];
   CGPoint positionInScene = [touch locationInNode:self];

   pathToDraw = CGPathCreateMutable();
   CGPathMoveToPoint(pathToDraw, NULL, positionInScene.x, positionInScene.y);

   selectorLine = [SKShapeNode node];
   selectorLine.path = pathToDraw;
   selectorLine.strokeColor = [SKColor greenColor];
   selectorLine.lineWidth = 10;
   [self addChild:selectorLine];
   selectorLine.zPosition = 101;

触摸移动:
    UITouch* touch = [touches anyObject];
    CGPoint positionInScene = [touch locationInNode:self];
    CGPathAddLineToPoint(pathToDraw, NULL, positionInScene.x, positionInScene.y);
    selectorLine.path = pathToDraw;

任何和所有的想法表示赞赏,谢谢!

最佳答案

我一直在我的代码中通过使用 CGRectIntersectsRect 作为 SKShapeNode 边界矩形交叉点来解决这个问题。

使用 CGRectIntersectsRect 您的代码如下所示:

if (directionIsDecided == TRUE) {
    for (letterTile in letterTileArray) {
        if (CGRectIntersectsRect(letterTile.frame, selectorLine.frame)) {
            [lettersToBeCalculatedForPoints addObject:letterTile];
        }
    }
}

关于ios - intersectsNode 未检测到相交,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20672905/

10-12 00:18
查看更多