在这个项目中,有两个玩家,都可以射击。当对面玩家的子弹击中一艘船时,它会降低他们的健康并消失,这很好用。问题是我不希望船只或子弹对相互碰撞做出反应。
这是制作第一个播放器的代码:
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];
第二个玩家:
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;
这样做的方式是否有任何明显的问题会导致第一个玩家和子弹对碰撞做出反应?在此先感谢您的帮助,并为长期阅读感到抱歉。