你好開發夥伴,雪碧套件忽略有時聯繫
我是新來的雪碧套件,剛開始實施物理到我的遊戲。我只有兩個需要接觸的精靈。一個是主角,一個是蝴蝶「螢火蟲」,另一個是能量球,在接觸時給予主角健康。
但是我的遊戲中發生了一些奇怪的事情,儘管我實現了我所有的物理線路工作,有時候,在某些我不明白的條件下,能量球會穿過主角並忽略聯繫人和聯繫人實施的效果應該發生。然後,我必須積極尋找能量球,以便它發生,並嘗試觸摸它不同的時間才能成功。
我希望接觸總是會發生,不管能量是否偶然碰到我,或者我主動尋找它。當這兩個精靈以任何方式接觸時都應該發生接觸。我試了一切,最後決定尋求幫助。
這裏是我的委託:
@interface CloudScene() <SKPhysicsContactDelegate>
請注意,我在固定的問題,希望增加這些屬性,但問題是在他們之前:
@property(assign, nonatomic) uint32_t contactTestBitMask;
@property(nonatomic) BOOL usesPreciseCollisionDetection;
static const uint32_t bflyCategory = 0x1 << 0;
static const uint32_t energyCategory = 0x1 << 1;
initWithSize方法:
self.physicsWorld.gravity = CGVectorMake(0, 0);
self.physicsWorld.contactDelegate = self;
兩者的物理(通知碰撞被設置爲0之前和問題仍然存在,我只增加他們在希望的彈跳效果至少會不會讓球筆直地穿過bfly字符,但沒有工作):
_bfly.name = @"bflyNode";
_bfly.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:_bfly.frame.size];
_bfly.physicsBody.categoryBitMask = bflyCategory;
_bfly.physicsBody.contactTestBitMask = energyCategory;
_bfly.physicsBody.collisionBitMask = bflyCategory | energyCategory;
_bfly.physicsBody.usesPreciseCollisionDetection = YES;
_bfly.physicsBody.dynamic = YES;
_bfly.physicsBody.affectedByGravity = NO;
_bfly.physicsBody.mass = 1;
energyball.name = @"energyballNode";
energyball.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:energyball.frame.size];
energyball.physicsBody.categoryBitMask = energyCategory;
energyball.physicsBody.contactTestBitMask = bflyCategory;
energyball.physicsBody.collisionBitMask = energyCategory | bflyCategory;
energyball.physicsBody.usesPreciseCollisionDetection = YES;
energyball.physicsBody.dynamic = YES;
energyball.physicsBody.affectedByGravity = NO;
energyball.physicsBody.mass = 1;
最後這裏是我的didBeginContact方法:提前
-(void)didBeginContact:(SKPhysicsContact *)contact{
SKPhysicsBody *bfly;
SKPhysicsBody *energyball;
if (contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask)
{
bfly = contact.bodyA;
energyball = contact.bodyB;
}
else
{
bfly = contact.bodyB;
energyball = contact.bodyA;
}
if ((bfly.categoryBitMask & bflyCategory) != 0)
{
SKNode * energyball = (contact.bodyA.categoryBitMask & bflyCategory) ? contact.bodyB.node : contact.bodyA.node;
SKAction*energySound = [SKAction playSoundFileNamed:@"Energybell.m4a" waitForCompletion:NO];
[energyball runAction:energySound];
energyball.hidden = YES;
[self addChild:[self FenergyNode:@"energy"]];
[self adjustScoreBy:2];
[scoreLabel setText: [NSString stringWithFormat:@"Score: %d", [GameState sharedInstance].score]];
_bflyHP =MAX(0, _bflyHP+100);
[energyball runAction:[SKAction removeFromParent]];
}
}
謝謝!