J'ai deux SKPhysicsBody fixes différentes dans un SKScene. La seule différence entre les deux est leur categoryBitMask. On a un categoryBitMask de 512, l'autre 1024.Comment les bodyA et bodyB sont-ils déterminés dans SKPhysicsContact?
static const u_int32_t kWallCategory = 0x1 << 9; //512
static const u_int32_t kStructureCategory = 0x1 << 10; //1024
Dans mon programme, j'ai un gestionnaire de contact standard appelé de -(void)didBeginContact:(SKPhysicsContact *)contact
qui commence:
-(void)handleContact:(SKPhysicsContact*)contact {
SKPhysicsBody *bodyA = contact.bodyA;
SKPhysicsBody *bodyB = contact.bodyB;
int type1 = contact.bodyA.categoryBitMask;
int type2 = contact.bodyB.categoryBitMask;
Dans mon programme, je dois déterminer la vecteur de contact entre un corps dynamique et l'un des deux corps fixes. Pour ce faire, j'accéder à la propriété contactNormal du SKPhysicsContact
CGVector c = contact.contactNormal;
Ce que je remarque, cependant, est que les vecteurs de contact étaient incompatibles et je déterminé c'était parce que parfois Bodya du SKPhysicsContact était le corps fixe, parfois bodyA était le corps dynamique. Par exemple, quand une balle (corps dynamique) frappe un bâtiment (corps fixe) à partir de la gauche, je veux que le vecteur de contact soit (-1,0)
chaque fois. Actuellement, le vecteur de contact est parfois (-1,0)
(à partir de la gauche) et parfois (1,0)
(à partir de la droite) tout dépend de quel corps contact.bodyA
est.
Ma question: étant donné que toutes les autres choses sont égales (propriétés physiques, etc.), qu'est-ce qui détermine ce qu'est bodyA et qu'est ce que bodyB dans un SKPhysicsContact?
C'est génial. Votre conclusion selon laquelle il faut toujours tester quel corps est ce qui est important (en supposant que cela a de l'importance pour ce que fait votre contact), mais il y a un problème en cours de route: la raison de toujours tester n'est pas difficile Entrez dans la scène. Apple ne promet pas que les corps A et B seront dans * un * ordre déterministe - vous l'avez corrélé à l'ordre de création, mais il n'y a aucune garantie que ce soit la même chose sur tous les appareils et versions OS. – rickster