2017-09-01 2 views
0
class GameScene: SKScene, SKPhysicsContactDelegate { 

let balls = [ 
    SKSpriteNode(imageNamed: "blueball.png"), 
    SKSpriteNode(imageNamed: "greenball.png"), 
    SKSpriteNode(imageNamed: "realredball.png") 
] 


let redRectangle = SKSpriteNode(imageNamed: "redrectangle.png") 
let blueRectangle = SKSpriteNode(imageNamed: "bluerectangle.png") 
let greenRectangle = SKSpriteNode(imageNamed: "greenrectangle.png") 

override func didMove(to view: SKView) { 
    spawnBalls() 
    rectangles() 
    physicsWorld.contactDelegate = self 

} 
override func touchesBegan(_ touches: Set<UITouch>, with event:  UIEvent?) { 
     for ball in balls{ 
      ball.physicsBody = SKPhysicsBody() 
      ball.physicsBody?.affectedByGravity = true 
      } 
    } 

func spawnBalls() { 

    let ball = balls[Int(arc4random_uniform(UInt32(balls.count)))] 
    ball.physicsBody = SKPhysicsBody() 
    ball.physicsBody?.affectedByGravity = false 
    ball.position = CGPoint(x: 0, y: 250) 
    ball.size = CGSize(width: 70, height: 70) 
    ball.physicsBody?.categoryBitMask = 0 
    ball.physicsBody?.collisionBitMask = 1 
    self.addChild(ball) 
} 

func rectangles() { 
    redRectangle.position = CGPoint(x: -316.5, y: -657) 
    redRectangle.size = CGSize(width: 400, height: 20) 
    redRectangle.physicsBody = SKPhysicsBody() 
    redRectangle.physicsBody?.categoryBitMask = 1 
    redRectangle.physicsBody?.collisionBitMask = 0 
    blueRectangle.size = CGSize(width: 400, height: 20) 
    blueRectangle.position = CGPoint(x: -100, y: -657) 
    blueRectangle.physicsBody = SKPhysicsBody() 
    greenRectangle.position = CGPoint(x: 0, y: -657) 
    greenRectangle.size = CGSize(width: 400, height: 20) 
    greenRectangle.physicsBody = SKPhysicsBody() 
    self.addChild(redRectangle) 
    self.addChild(blueRectangle) 
    self.addChild(greenRectangle) 
} 

} 

Ich möchte, dass die Bälle herunterfallen und Kontakt mit den Rechteckknoten aufnehmen, obwohl es so aussieht, als würden die Bälle gerade durch sie hindurchgehen. Ich habe Kollisions- und Kategorie-Bitmasken verwendet. Ich frage mich, ob jemand helfen könnte, dieses Problem zu beheben, danke.Meine Knoten kollidieren nicht

+0

Die Bälle sollten nur mit den roten Rechtecken kollidieren, ja? –

+0

ja, ich habe es herausgefunden, danke. – user8548753

+0

Falls jemand anderes das gleiche Problem hat, können Sie die Lösung posten? Sie können eine Antwort auf Ihre eigene Frage posten. –

Antwort

0

Sie initialisieren die Kugeln richtig, aber entfernen Sie ihren Physikkörper, indem Sie innerhalb von touchesBegan(_:) einen neuen Körper erstellen. Einfach diese Zeile aus der touchesBegan(_:) Funktion entfernen:

+0

Danke, aber ich habe die Linie gelöscht und der Ball ist immer noch durch den roten Rechteckknoten gegangen – user8548753

Verwandte Themen