2016-03-24 8 views
0

私は、落下しているオブジェクトをかわすようなゲームを作っています。落下物がプレーヤーに当たったときに特定のコードが実行されるように、私はそれを作ろうとしました。しかし、私のコードに何が間違っているかを教えてください。スプライトキットの接触の問題

import SpriteKit 

struct physicsCatagory { 
    static let person : UInt32 = 0x1 << 1 
    static let Ice : UInt32 = 0x1 << 2 
} 


class GameScene: SKScene, SKPhysicsContactDelegate { 

    var person = SKSpriteNode(imageNamed: "Person") 



    override func didMoveToView(view: SKView) { 


     physicsWorld.contactDelegate = self 


     person.position = CGPointMake(self.size.width/2, self.size.height/12) 
     person.setScale(0.4) 
     person.physicsBody = SKPhysicsBody(rectangleOfSize: person.size) 
     person.physicsBody?.affectedByGravity = false 
     person.physicsBody?.categoryBitMask = physicsCatagory.person 
     person.physicsBody?.contactTestBitMask = physicsCatagory.Ice 
     person.physicsBody?.dynamic = false 



     var IceTimer = NSTimer.scheduledTimerWithTimeInterval(0.5, target: self, selector: Selector("spawnFirstIce"), userInfo: nil, repeats: true) 

     self.addChild(person) 


     func didBeginContact(contact: SKPhysicsContact) { 
      let firstBody = contact.bodyA 
      let secondBody = contact.bodyB 

      if firstBody.categoryBitMask == physicsCatagory.person && secondBody.categoryBitMask == physicsCatagory.Ice || firstBody.categoryBitMask == physicsCatagory.Ice && secondBody.categoryBitMask == physicsCatagory.person{ 
     NSLog ("Test Test")   } 


     } 


    } 




    func spawnFirstIce(){ 

     let Ice = SKSpriteNode(imageNamed: "FirstIce") 
     Ice.setScale(0.5) 
     Ice.physicsBody = SKPhysicsBody(rectangleOfSize: Ice.size) 
     Ice.physicsBody?.categoryBitMask = physicsCatagory.Ice 
     Ice.physicsBody?.contactTestBitMask = physicsCatagory.person 
     Ice.physicsBody?.affectedByGravity = false 
     Ice.physicsBody?.dynamic = true 



     let MinValue = self.size.width/8 
     let MaxValue = self.size.width - 20 
     let SpawnPoint = UInt32(MaxValue - MinValue) 
     Ice.position = CGPoint(x: CGFloat(arc4random_uniform(SpawnPoint)), y: self.size.height) 
     self.addChild(Ice) 



     let action = SKAction.moveToY(-85, duration: 3.0) 
     let actionDone = SKAction.removeFromParent() 
     Ice.runAction(SKAction.sequence([action,actionDone])) 


    } 
    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 


     for touch in touches { 
      let location = touch.locationInNode(self) 

     person.position.x = location.x 



        } 
    } 
    override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) { 

     for touch in touches { 
      let location = touch.locationInNode(self) 

      person.position.x = location.x 



     } 
    } 




    override func update(currentTime: CFTimeInterval) { 
     /* Called before each frame is rendered */ 
    } 
} 

答えて

1

あなたはdidMoveToView方法:)

場所didBeginContactその方法の外に、それGameSceneクラスのメンバ作るの内側didBeginContactを定義しています。

+0

OOOOHH。そんなにありがとう。私はこの愚かな事を見て一週間過ごした。あなたは私の救い主です。 – Jaa3

+0

関数定義内にprint( "Entering didBegingContact")を入れて呼び出されたかどうか確認しましたか? –