如何检查是否有一些SKPhysicsBody包含在另一个中

时间:2016-03-05 19:14:49

标签: objective-c sprite-kit

我已经审核了类似的问题,并且相信我会询问不同的事情。

我有一个拥有它自己身体的玩家节点,我想检查它何时被移动到某个级别(退出节点)。这方面的例子可能是将一些动态物品放在一个盒子里,或者将车停在特定的地方。

在我的情况下,播放器是SKSpriteNode,其中physicsBody是从类似的纹理(bodyWithTexture)创建的,exit是SKNode,没有使用多边形路径创建的visual和physicsBody(4点,非矩形)。

我有一个代码可以做我不想做的事情,但我相信在某些情况下它可以做一些我不想要的事情,而且还有更好的方法可以做到。

    int contactsCount = 0;    
    - (void)didBeginContact:(SKPhysicsContact *)contact{
        if ((contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask) & exitCategory) {
            contactsCount++;
            if (contactsCount == 4) {
                [player runAction:[SKAction colorizeWithColor:[UIColor greenColor] colorBlendFactor:1.0 duration:1.0] completion:^{
                    self.physicsWorld.speed = 0;
                }];
            }
            return;
        }

        [player runAction:[SKAction colorizeWithColor:[UIColor redColor] colorBlendFactor:1.0 duration:1.0] completion:^{
            self.physicsWorld.speed = 0;
        }];
    }

    - (void)didEndContact:(SKPhysicsContact *)contact{
        if ((contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask) & exitCategory) {
            contactsCount--;
            return;
        }
    }

0 个答案:

没有答案