2014-10-09 24 views
3

你好,我想阻止SKSpriteNode離開屏幕或使它在點擊屏幕邊界時彈回。當它觸及邊界時是否也可以調用一個函數?停止SKSpriteNode離開視圖(Swift)

如果發現這個問題Click

在那裏他使用此代碼:

let borderBody = SKPhysicsBody(edgeLoopFromRect: self.frame) 
self.physicsBody = borderBody 
borderBody.friction = 0.0 
borderBody.restitution = 1.0 

但由於某些原因,它只能從移出頂部和bottem的擋住了我的節點(這是動態的),但它能夠移出一邊。

(記住,即時通訊新SpriteKit和斯威夫特保持)

編輯:我發現這個代碼:

extension GameScene: SKPhysicsContactDelegate { 
    func didBeginContact(contact: SKPhysicsContact!) { 
     let contactMask = contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask 

     switch (contactMask) { 
     case BodyType.pipe.toRaw() | BodyType.bomb.toRaw(): 
      println("Contact with a bomb") 
      if contact.bodyA.categoryBitMask == BodyType.pipe.toRaw() { 
       explode(pipe: contact.bodyA.node as SKSpriteNode) 
      } else { 
       explode(pipe: contact.bodyB.node as SKSpriteNode) 
      } 
     case BodyType.pipe.toRaw() | BodyType.bird.toRaw(): 
      println("Contact with a pipe") 
      bird.pushDown() 
     case BodyType.ground.toRaw() | BodyType.bird.toRaw(): 
      println("Contact with ground") 
      for actor in actors { 
       actor.stop() 
      } 

      let shakeAction = SKAction.shake(0.1, amplitudeX: 20) 
      screenNode.runAction(shakeAction) 
     default: 
      return 
     } 

    } 

我讀它是像設置類別?這段代碼是否合適?

+1

你不得不考慮碰撞檢測的大小。請參閱Apple的文檔:https://developer.apple.com/library/ios/documentation/GraphicsAnimation/Conceptual/SpriteKit_PG/Physics/Physics.html – chrs 2014-10-09 17:04:38

+0

您的場景比您的視圖大。嘗試將.AspectFill中的scaleMode更改爲GameViewController.swift中的.ResizeFill。 – 0x141E 2014-10-09 17:25:29

+0

@ 0x141E,我試過你的建議,它使屏幕左側反彈回來,但在右側它不起作用..? – Egghead 2014-10-09 20:56:37

回答

0

是的,這是可能的。

  • 你必須設置一個帶有rect類型的物理體的SKNode,並賦予它self.size的大小。這將爲屏幕邊界創建一個物理主體。

  • 然後你必須在上面的SKNode的物理體上設置一個類別位掩碼。這是我們可以識別我們的物理機構的一種方式。

  • 然後,你必須給上面的SKNode一個collisionbitmask,它等於你不想離開屏幕的Node的categorybitmask。這將使節點崩潰到邊界並彈回。

  • 最後,如果將contacttestbitmask設置爲另一個的categorybitmask。蘋果功能「didBeginContact」將運行,並在那裏你可以做一些事情。

希望幫助!

1

物理體設置在屏幕

self.physicsBody = SKPhysicsBody(edgeLoopFromRect: self.frame)