ios - Physics Bodies 不响应位掩码设置

标签 ios sprite-kit skphysicsbody

我在物理体上设置碰撞位掩码,这样它就不会发生碰撞,但碰撞仍在发生。

-(void) createPlayer{
    player = [SKSpriteNode spriteNodeWithImageNamed:@"GonGonRed"];
    player.position = CGPointMake(40, 100);
    player.size = CGSizeMake(35*self.frame.size.height/320, 35*self.frame.size.height/320);
    player.zPosition = 7;    
    player.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:player.size.width/2-1];
    player.physicsBody.dynamic = NO;
    player.physicsBody.allowsRotation = NO;
    player.physicsBody.usesPreciseCollisionDetection = YES;
    player.physicsBody.categoryBitMask = 1;
    player.physicsBody.contactTestBitMask = 4;
    player.physicsBody.collisionBitMask = 2;
    player.physicsBody.mass = 0.013963;
    [self addChild:player];
}


SKSpriteNode *wheel = [SKSpriteNode spriteNodeWithImageNamed:@"wheel"];
wheel.size = CGSizeMake(newwidth, newheight);
wheel.position = CGPointMake(px, py);
wheel.name = @"wheel";    
wheel.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:newwidth/2];
wheel.physicsBody.dynamic = NO;
wheel.physicsBody.restitution = obstacleRestitution;
wheel.physicsBody.usesPreciseCollisionDetection = YES;
wheel.physicsBody.categoryBitMask = 3;
wheel.physicsBody.collisionBitMask = 0;
wheel.physicsBody.contactTestBitMask = 0;
wheel.zPosition = 5;

轮子和玩家不应该发生碰撞,但它们确实发生了。我

最佳答案

这是由以下行引起的。

wheel.physicsBody.categoryBitMask = 3;

SpriteKit 通过执行逻辑与运算 将主体的 categoryBitMask 与另一个主体的 collisionBitMask 进行比较。 当结果为非零值时,将触发碰撞。

在这种情况下,SpriteKit 将 wheel 的 categoryBitMask 与玩家的 collisionBitMask 进行比较,如下所示。

车轮的 categoryBitMask 是 0x011 (= 3)
玩家的 collisionBitMask 是 0x010 (= 2)
AND 运算结果为 0x010。这是非零的,因此发生了碰撞。

因此您应该更改 wheel 的 categoryBitMask 值以避免逻辑 AND 运算的结果变为非零,如下所示。

wheel.physicsBody.categoryBitMask = 8;

此外,动态属性必须设置为 YES。

关于ios - Physics Bodies 不响应位掩码设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21505660/

相关文章:

ios - 为 iOS 应用程序创建图标

ios - 如何在 SpriteKit 中缩短阴影?

ios - 将 UIView 转换到 SKView 时线程 1 信号 SIGABRT 崩溃

ios - 缩放使用 SKSpriteNodes 制作的钟摆

ios - 如何使用 SpriteKit 绘制实心圆?

ios - SKPhysicsJoints 可以用于滚动的 SpriteKit 游戏吗?

ios - 从Firebase iOS SDK获取user_pseudo_id

ios - 将图像添加到 UICollectionView 中的 AVPlayerViewController

javascript - 将 NSURLProtocol 与 ReactNative 结合使用

swift - SpriteKit 和 Swift 的自定义着色器有一些不同