我已经审核了类似的问题,并且相信我会询问不同的事情。
我有一个拥有它自己身体的玩家节点,我想检查它何时被移动到某个级别(退出节点)。这方面的例子可能是将一些动态物品放在一个盒子里,或者将车停在特定的地方。
在我的情况下,播放器是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;
}
}