2016-11-27 2 views
-2

壁にぶつかってプレイヤーにぶつかりません! それは衝突していない左の壁ですが、私はなぜそれがgap/scoreNodeだと思ったのかわかりません。私はそれが物理学の団体だと思う。スウィフト3スプライトキットの衝突Xcode 8

Faller = SKSpriteNode(color: UIColor.red, size: CGSize(width: 100, height: 100)) 
    Faller.position = CGPoint(x: self.frame.width/2 - 400, y: self.frame.height - 300) 

    Faller.physicsBody = SKPhysicsBody(rectangleOf: Faller.size) 
    Faller.physicsBody?.categoryBitMask = PhysicsCatagory.Faller 
    Faller.physicsBody?.collisionBitMask = PhysicsCatagory.Ground | PhysicsCatagory.Wall | gapGroup 
    Faller.physicsBody?.contactTestBitMask = PhysicsCatagory.Ground | PhysicsCatagory.Wall 
    Faller.physicsBody?.affectedByGravity = false 
    Faller.physicsBody?.isDynamic = true 

転倒がプレイヤー

let randomSize = CGFloat.random(min: 600, max: self.frame.width/2 + 156) 
     let gap = SKNode() 


     gap.position = CGPoint(x: self.frame.width/2, y: self.frame.height/4 - 50) 
     gap.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: 100, height: 2)) 

     gap.run(moveAndRemove) 
     gap.physicsBody?.isDynamic = false 
     gap.physicsBody?.collisionBitMask = gapGroup 
     gap.physicsBody?.categoryBitMask = gapGroup 
     gap.physicsBody?.contactTestBitMask = fallerGroup 
     gap.name = "gap" 
     gap.zPosition = 1 







     let rightWall = SKSpriteNode(color: UIColor.green, size: CGSize(width: 243, height: 100)) 
     rightWall.size.width += randomSize 

     let leftWall = SKSpriteNode(color: UIColor.green, size: CGSize(width: 343, height: 100)) 
     leftWall.size.width -= (randomSize - 100) 




     rightWall.position = CGPoint(x: self.frame.width/2 + 400, y: self.frame.height/4) 
     leftWall.position = CGPoint(x: self.frame.width/2 - 400, y: self.frame.height/4) 


     leftWall.physicsBody = SKPhysicsBody(rectangleOf: leftWall.size) 
     leftWall.physicsBody?.categoryBitMask = PhysicsCatagory.Wall 
     leftWall.physicsBody?.collisionBitMask = PhysicsCatagory.Faller 
     leftWall.physicsBody?.contactTestBitMask = PhysicsCatagory.Faller 
     leftWall.physicsBody?.isDynamic = false 
     leftWall.physicsBody?.affectedByGravity = false 
     leftWall.name = "lWall" 

     self.addChild(leftWall) 

     rightWall.physicsBody = SKPhysicsBody(rectangleOf: rightWall.size) 
     rightWall.physicsBody?.categoryBitMask = PhysicsCatagory.Wall 
     rightWall.physicsBody?.collisionBitMask = PhysicsCatagory.Faller 
     rightWall.physicsBody?.contactTestBitMask = PhysicsCatagory.Faller 
     rightWall.physicsBody?.isDynamic = false 
     rightWall.physicsBody?.affectedByGravity = false 
     rightWall.name = "rWall" 
     self.addChild(rightWall) 





     rightWall.zPosition = 2 
     leftWall.zPosition = 2 


     self.addChild(gap) 

であり、ここでコリジョン機能が

unc didBegin(_ contact: SKPhysicsContact){ 

    let firstBody = contact.bodyA 
    let secondBody = contact.bodyB 

    if firstBody.categoryBitMask == PhysicsCatagory.Wall && secondBody.categoryBitMask == PhysicsCatagory.Faller || firstBody.categoryBitMask == PhysicsCatagory.Faller && secondBody.categoryBitMask == PhysicsCatagory.Wall { 

     print("collided") 

     let endScene = EndScene(size: self.size) 
     let transition = SKTransition.doorsCloseHorizontal(withDuration: 0.5) 
     endScene.scaleMode = SKSceneScaleMode.aspectFill 
     self.scene!.view?.presentScene(endScene, transition: transition) 



     //    touched = true 









    } 

    if firstBody.categoryBitMask == gapGroup && secondBody.categoryBitMask == PhysicsCatagory.Faller || firstBody.categoryBitMask == PhysicsCatagory.Faller && secondBody.categoryBitMask == gapGroup { 
     print("score working") 
     if pause == false { 
      score += 1 
      if score > highScore { 
       highScore = score 
      } 

     } 

     scoreLabel.text = "Score: \(score)" 

     let HighscoreDefault = UserDefaults.standard 
     HighscoreDefault.setValue(highScore, forKey: "highScore") 
     HighscoreDefault.synchronize() 


     print(highScore) 
     print("fell") 
    } 

}

+0

が転倒からisDynamicを削除しようと(またはfalseに設定)を使用すると、衝突がソートの – DreamerNo56

+0

を - didBeginContactが呼ばれるダイナミックなボディ他のすべてがOKであると仮定して、非動的な身体接触をします。 – Nik

+0

@Nikを仕事をしたいのノードに対して真である必要がisDynamic –

答えて

0

理解し、ボリュームベースの体が影響を受けているかどうかisDynamicプロパティを制御しています他のオブジェクトとの衝突。

試してみてください。

leftWall.physicsBody?.isDynamic = true 
rightWall.physicsBody?.isDynamic = true 
+0

Chris Karani、私はそれを試みたが、うまくいかなかった – Smilez

関連する問題