2016-03-24 37 views
0

Düşen nesneleri atlatmanızı gerektiren bir oyun yapıyorum. Düşüren nesne oyuncuya isabet ettiğinde belirli kodun çalışmasını sağlamak için bunu yapmaya çalıştım. Ama çalışmıyor, lütfen kodumda neyin yanlış olduğunu göster.Sprite seti iletişim sorunları

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 */ 
    } 
} 

cevap

1

Sen didMoveToView yöntemle :)

Yeri didBeginContact o yöntemin dışında ve GameScene sınıfın üyesi yapmak içinde didBeginContact tanımladık.

+0

OOOOHH. Çok çok teşekkür ederim. Bu aptal şeye bakarak bir hafta geçirdim. Sen benim kurtarıcımsın. – Jaa3

+0

İşlev tanımınızın içine, yazdırılıp yazdırılmadığını görmek için bir yazdırma ("didBegingContact Girme") yerleştirmeyi denediniz mi? –