簡體   English   中英

物理機構沒有響應位掩碼設置

[英]Physics Bodies not responding to bitmask settings

我在物理主體上設置碰撞位掩碼,這樣它就不會發生碰撞,但仍然會發生碰撞。

-(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通過執行邏輯AND操作將正文的categoryBitMask與其他正文的collisionBitMask進行比較。 當結果為非零值時,將觸發碰撞。

在這種情況下,SpriteKit將wheel的categoryBitMask與玩家的collisionBitMask進行比較,如下所示。

wheel的categoryBitMask是0x011(= 3)
玩家的collisionBitMask是0x010(= 2)
AND運算結果為0x010。 這是非零,因此發生了碰撞。

因此,您應該更改wheel的categoryBitMask值,以避免邏輯AND操作的結果變為非零,如下所示。

wheel.physicsBody.categoryBitMask = 8;

此外,動態屬性必須設置為YES。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM