3

衝突しないように物理ボディに衝突ビットマスクを設定していますが、衝突はまだ発生しています。

-(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;

ホイールとプレーヤーが衝突するべきではありませんが、衝突しています。私

4

1 に答える 1

3

これは、以下の行が原因です。

wheel.physicsBody.categoryBitMask = 3;

SpriteKit は、論理 AND 演算を実行することによって、ボディの categoryBitMask を他のボディの collisionBitMask と比較します。結果がゼロ以外の値の場合、衝突が発生します。

この場合、SpriteKit は以下のように、ホイールのカテゴリビットマスクとプレーヤーの衝突ビットマスクを比較します。

ホイールのcategoryBitMaskは0x011(=3)
プレイヤーのcollisionBitMaskは0x010(=2)
AND演算結果は0x010。これは非ゼロであるため、衝突が発生します。

したがって、以下のように、論理積演算の結果が非ゼロになるのを避けるために、wheel の categoryBitMask 値を変更する必要があります。

wheel.physicsBody.categoryBitMask = 8;

さらに、動的プロパティを YES に設定する必要があります。

于 2014-02-02T07:27:06.470 に答える