在這個項目中有兩個玩家,都可以射擊。當對方球員擊中一艘船時,它會降低他們的健康並消失,這很好。問題是我不希望船隻或子彈對彼此碰撞做出反應。如何讓SKSpriteNode只對某些衝突作出反應
下面是製作第一個球員代碼:
player = [SKSpriteNode spriteNodeWithImageNamed:filePath];
player.size = CGSizeMake(100, 100);
player.position = CGPointMake(150, 250);
player.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:player.size];
player.physicsBody.categoryBitMask = playerCategory;
player.physicsBody.collisionBitMask = wallCategory;
player.physicsBody.friction = 1.0f;
player.physicsBody.restitution = 1.0f;
player.physicsBody.linearDamping = 1.0f;
player.physicsBody.allowsRotation = NO;
[self addChild:player];
及第2選手:
playerTwo = [SKSpriteNode spriteNodeWithImageNamed:filePath];
playerTwo.size = CGSizeMake(100, 100);
playerTwo.position = CGPointMake((384*2)-150, (512*2)-250);
playerTwo.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:playerTwo.size];
playerTwo.physicsBody.categoryBitMask = playerTwoCategory;
playerTwo.physicsBody.collisionBitMask = wallCategory;
playerTwo.physicsBody.friction = 1.0f;
playerTwo.physicsBody.restitution = 1.0f;
playerTwo.physicsBody.linearDamping = 1.0f;
playerTwo.physicsBody.allowsRotation = NO;
[self addChild:playerTwo];
類別的初始化:
static const uint32_t playerCategory = 2;
static const uint32_t playerTwoCategory = 5;
static const uint32_t wallCategory = 1;
static const uint32_t bulletCategory = 4;
static const uint32_t bulletTwoCategory = 7;
的子彈播放製作一個:
SKSpriteNode * bullet = [SKSpriteNode spriteNodeWithColor:[UIColor whiteColor] size:CGSizeMake(5, 5)];
bullet.position = [gunOne convertPoint:CGPointMake(0,0) toNode:self];
[self addChild:bullet];
bullet.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:bullet.frame.size];
bullet.physicsBody.categoryBitMask = bulletCategory;
bullet.physicsBody.dynamic = YES;
bullet.physicsBody.contactTestBitMask = playerTwoCategory | wallCategory;
bullet.physicsBody.collisionBitMask = wallCategory;
bullet.physicsBody.usesPreciseCollisionDetection = YES;
子彈製作供玩家二:
SKSpriteNode * bulletTwo = [SKSpriteNode spriteNodeWithColor:[UIColor whiteColor] size:CGSizeMake(5, 5)];
bulletTwo.position = [gunOneTwo convertPoint:CGPointMake(0,0) toNode:self];
[self addChild:bulletTwo];
bulletTwo.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:bulletTwo.frame.size];
bulletTwo.physicsBody.categoryBitMask = bulletTwoCategory;
bulletTwo.physicsBody.dynamic = YES;
bulletTwo.physicsBody.contactTestBitMask = playerCategory | wallCategory;
bulletTwo.physicsBody.collisionBitMask = wallCategory;
bulletTwo.physicsBody.usesPreciseCollisionDetection = YES;
是否與這樣做會導致僅僅是第一的球員,子彈反應碰撞過程中的任何可見的問題?在此先感謝您的幫助,併爲長時間閱讀而感到抱歉。