2014-04-16 3 views
0

À certains moments de mon jeu, je veux que des tonnes de balles tombent sur l'écran. Une fois qu'ils touchent le sol et rebondissent un peu, je veux qu'ils restent assis là, et qu'ils n'aient plus besoin de bouger.Comment détruire un SKPhysicsBody?

Une fois que j'ai atteint 200 corps de physique, le jeu devient très lent, donc je voudrais détruire les corps. Voici ce que je cherchais dans mon code:

-(void)didBeginContact:(SKPhysicsContact *)contact { 

    if (contact.contactPoint.y < 150) { 
     if (contact.bodyA.categoryBitMask == MYPhysicsCategoryBall) { 
      NSLog(@"body a is ball"); 
      contact.bodyA = nil; 
     } 

     if (contact.bodyB.categoryBitMask == MYPhysicsCategoryBall) { 
      NSLog(@"body b is a weapon"); 
     } 
} 

Cela ne fonctionne pas, parce que contact.bodyA et contact.bodyB sont à la fois en lecture seule, donc je dois corriger cela, mais à part cela, est-ce que la mise en le corps physique réel à zéro le détruire et faire fonctionner le simulateur de physique plus rapidement? Ou y a-t-il un meilleur moyen de réparer le coup de performance? Je veux être en mesure d'ajouter plus de 200 balles, peut-être 500 ou 600.

Répondre

3

Utilisez contact.bodyA.node.physicsBody:

-(void)didBeginContact:(SKPhysicsContact *)contact { 

    if (contact.contactPoint.y < 150) { 
     if (contact.bodyA.categoryBitMask == MYPhysicsCategoryBall) { 
      NSLog(@"body a is ball"); 
//   contact.bodyA = nil; 
      contact.bodyA.node.physicsBody = nil; 
     } 

     if (contact.bodyB.categoryBitMask == MYPhysicsCategoryBall) { 
      NSLog(@"body b is a weapon"); 
     } 
} 

Je ne l'ai pas testé si

+1

Je viens testé. Cela fonctionne parfaitement. +1 – sangony