我正在使用Sprite Kit创建一个涉及气球的游戏。气球图像是一个长矩形(虚线),但我已经使用多边形(实线)在气球周围定义了一个物理物体。我希望玩家能够“弹出”气球。我正在使用以下代码块来实现此目的:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [touches anyObject];
    NSArray *nodes = [self nodesAtPoint:[touch locationInNode:self]];
    for (SKNode *node in nodes) {
        [node removeFromParent];
        SKAction *pop = [SKAction playSoundFileNamed:@"pop.wav" waitForCompletion:NO];
        [self runAction:pop];
    }
}

不幸的是,当一串气球中有多个气球时,此方法可能导致一次点击弹出多个气球。这是因为子画面图像重叠(即使物理物体不重叠)。还有不希望的效果,即敲击琴弦将具有与敲打气球相同的效果。

我可以访问接触点的坐标,但是是否甚至可以检测到某个点是否位于物理实体(相对于节点)定义的区域内?

最佳答案

使用物理世界的bodyAtPoint:方法:

SKPhysicsBody* body = [self.scene.physicsWorld bodyAtPoint:location];

10-07 19:05
查看更多