2016-01-04 3 views
1

У меня есть изображение автомобиля в середине моего экрана. Поэтому, когда я нажимаю на экран, я хочу, чтобы он изменился с автомобиля на плоское изображение, и когда я отпустил экран, я хочу, чтобы он вернулся к изображению автомобиля. Код, который у меня есть, продолжает воспроизводить изображения снова и снова, и они не переключаются между двумя изображениями. Вот код, который у меня есть:Как бы переключаться между изображениями в Swift?

func addCar() { 

    let redCar = SKSpriteNode(imageNamed: "redC") 
    redCar.position = CGPointMake(self.size.width/2, self.size.height/7) 
    redCar.zPosition = 42 
    addChild(redCar) 



    redCar.physicsBody = SKPhysicsBody(circleOfRadius: 20) 
    redCar.physicsBody?.allowsRotation = false 
    redCar.physicsBody?.affectedByGravity = false 
    redCar.physicsBody?.contactTestBitMask = RedCategory | RedCarCategory 
    redCar.physicsBody?.categoryBitMask = RedCarCategory 
    redCar.physicsBody?.collisionBitMask = RedCarCategory 
} 



func addBluePlane() { 

    let bluePlane = SKSpriteNode(imageNamed: "blueC") 

    bluePlane.position = CGPointMake(self.size.width/2, self.size.height/7) 
    bluePlane.zPosition = 43 
    addChild(bluePlane) 

    bluePlane.physicsBody = SKPhysicsBody(circleOfRadius: 20) 
    bluePlane.physicsBody?.allowsRotation = false 
    bluePlane.physicsBody?.affectedByGravity = false 
    bluePlane.physicsBody?.contactTestBitMask = GreenCategory | BluePlaneCategory 
    bluePlane.physicsBody?.categoryBitMask = BluePlaneCategory 
    bluePlane.physicsBody?.collisionBitMask = BluePlaneCategory 
} 

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    /* Called when a touch begins */ 

    for touch in touches { 
     if let touch = touches.first { 
      let location = touch.locationInNode(self) 
      let node = self.nodeAtPoint(location) 

      addCar() 
     } 
    } 
} 


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

     addBluePlane() 

} 
+1

Вы можете использовать один SKSpriteNode и просто переключать его текстуру между автомобилем/самолетом. Или вы можете заменить два узла спрайтов. – jtbandes

+0

Итак, я бы поставил redCar.texture = SKTexture (imageNamed: "")? – coding22

+1

Да, это опция (хотя вы хотите «imageNamed:« blueC »). Тебе решать. – jtbandes

ответ

3

У меня нет опыта SpriteKit, но кажется, что вы создаете и добавляете узлы снова и снова. Вы должны объявить свой redCar в качестве переменной экземпляра вместо локальной переменной в классе. То же самое касается bluePlane.

class YourClass { 
    let redCar = SKSpriteNode(imageNamed: "redC") 
    let bluePlane = SKSpriteNode(imageNamed: "blueC") 

    func addCar() { 
     bluePlane.removeFromParent() 
     addChild(redCar) 
     //rest goes here. dont create another redCar object 
     //....... 
    } 

    func addBluePlane() { 
     redCar.removeFromParent() 
     addChild(bluePlane) 
     //rest goes here. dont create another bluePlane object 
     //....... 
    } 
} 
-1

Получил его на работу! Вот как я это сделал:

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    /* Called when a touch begins */ 



     if let touch = touches.first { 
      let location = touch.locationInNode(self) 
      let node = self.nodeAtPoint(location) 



      addCar() 
      bluePlane.removeFromParent() 




    } 
} 




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

    addBluePlane() 
    redCar.removeFromParent() 


} 
+1

Вау, а не круто @mamnun дал вам правильный ответ, и его путь намного лучше. Я бы отметил его как принятый ответ – Knight0fDragon

+0

Я знаю, что я просто хотел поделиться своим путем и с этим. – coding22