【发布时间】:2014-01-18 17:39:11
【问题描述】:
在这个项目中,有两个玩家,两个都可以射击。当对面的玩家子弹击中一艘船时,它会降低他们的健康并消失,这很好用。问题是我不希望船只或子弹在相互碰撞时做出反应。
这是制作第一个播放器的代码:
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;
这样做的方式是否有任何明显的问题会导致第一个玩家和子弹对碰撞做出反应?提前感谢您的帮助,很抱歉读了这么久。
【问题讨论】:
标签: sprite-kit skspritenode skphysicsbody