Je n'arrive pas à comprendre comment différencier les différents masques de bit.Différenciation entre différents masques de bit
Je veux que cela se produise:
/*func didBegin(_ contact: SKPhysicsContact) {
if (spaceship1 collides with spaceship2) {
print("contact between 1 and 2")
}
if (spaceship1 collides with spaceship3) {
print("contact between 1 and 3")
}
}
*/
Voici le code que j'ai essayé:
func didBegin(_ contact: SKPhysicsContact) {
if (contact.bodyA.categoryBitMask = enemyCategory && contact.bodyB.categoryBitMask = enemy2Category) {
print("contact between 1 and 2")
}
}
Puis-je obtenir de l'aide?
EDIT: Voici l'autre code:
import SpriteKit
import GameplayKit
class GameScene: SKScene, SKPhysicsContactDelegate {
let enemy2Category: UInt32 = 1
let enemyCategory: UInt32 = 2
let enemy3Category: UInt32 = 3
var spaceship1: SKSpriteNode!
var spaceship2: SKSpriteNode!
var spaceship3: SKSpriteNode!
override func didMove(to view: SKView) {
self.physicsWorld.contactDelegate = self
spaceship1 = SKSpriteNode(imageNamed: "Spaceship");
spaceship1.setScale(CGFloat(0.1))
spaceship1.position = CGPoint(x: self.frame.width/2, y: (self.frame.height/2));
spaceship1.name = "spaceship1";
spaceship1.physicsBody = SKPhysicsBody(circleOfRadius: spaceship1.size.width/2);
spaceship1.physicsBody?.isDynamic = true // apply gravity, friction, and collision
spaceship1.physicsBody?.affectedByGravity = true;
spaceship1.physicsBody?.allowsRotation = false
spaceship1.physicsBody = SKPhysicsBody(circleOfRadius: spaceship1.size.width/2);
spaceship1.physicsBody?.categoryBitMask = enemy2Category
spaceship1.physicsBody?.collisionBitMask = enemyCategory
spaceship1.physicsBody?.contactTestBitMask = enemyCategory
spaceship2 = SKSpriteNode(imageNamed: "Spaceship");
spaceship2.setScale(CGFloat(0.1))
spaceship2.position = CGPoint(x: self.frame.width/2, y: (spaceship1.position.y + 300));
spaceship2.name = "spaceship2";
spaceship2.physicsBody = SKPhysicsBody(circleOfRadius: spaceship2.size.width/2);
spaceship2.physicsBody?.isDynamic = true // apply gravity, friction, and collision
spaceship2.physicsBody?.affectedByGravity = false;
spaceship2.physicsBody?.allowsRotation = false
spaceship2.physicsBody = SKPhysicsBody(circleOfRadius: spaceship2.size.width/2);
spaceship2.physicsBody?.categoryBitMask = enemyCategory
spaceship2.physicsBody?.collisionBitMask = enemy2Category
spaceship2.physicsBody?.contactTestBitMask = enemy2Category
spaceship3 = SKSpriteNode(imageNamed: "Spaceship");
spaceship3.setScale(CGFloat(0.1))
spaceship3.position = CGPoint(x: self.frame.width/2, y: (spaceship1.position.y + 300));
spaceship3.name = "spaceship3";
spaceship3.physicsBody = SKPhysicsBody(circleOfRadius: spaceship2.size.width/2);
spaceship3.physicsBody?.isDynamic = true // apply gravity, friction, and collision
spaceship3.physicsBody?.affectedByGravity = false;
spaceship3.physicsBody?.allowsRotation = false
spaceship3.physicsBody = SKPhysicsBody(circleOfRadius: spaceship2.size.width/2);
spaceship3.physicsBody?.categoryBitMask = enemy3Category
spaceship3.physicsBody?.collisionBitMask = enemy2Category | enemyCategory
spaceship3.physicsBody?.contactTestBitMask = enemy2Category | enemyCategory
addChild(spaceship1)
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
addChild(spaceship3)
}
override func update(_ currentTime: TimeInterval) {
spaceship1.physicsBody?.affectedByGravity = false;
}
}
Je suis juste essayer de comprendre comment détecter qui bitmasks entrer en contact les uns avec les autres. Comme si le vaisseau spatial1 entre en contact avec le vaisseau spatial2, il imprime yay, mais si le vaisseau spatial1 entre en contact avec le vaisseau spatial 3, il imprime "wow"
@ G.L.. Avez-vous configuré correctement vos masques de bits de contact? Postez votre code où vous déclarez les masques de bit. – TheValyreanGroup
Ouais, les collisions fonctionnent, mais je veux que ça fasse des choses différentes selon le bitmask –
Je vais essayer d'expliquer ce que je veux mieux. –