2015-07-01 116 views
0

我想向我的SpriteKit场景添加一个转换,但它不起作用。我的第二个场景叫做“myScene”。这是我的代码:SpriteKit转换不起作用

func didBeginContact(contact: SKPhysicsContact) { 
    let collision:UInt32 = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask) 

    if collision == (playerCategory | crateCategory) { 

     NSLog("Game Over") 
     self.scene?.view?.paused = true 
     var myscene = myScene(size: self.size) 
     var transition = SKTransition.doorsCloseHorizontalWithDuration(0.5) 
     myscene.scaleMode = SKSceneScaleMode.AspectFill 
     self.scene!.view?.presentScene(myscene, transition: transition) 

    } 
    if (contact.bodyA.categoryBitMask == bubbleCategory) { 
     let node = contact.bodyB.node 
     //Other remove routine 
     node?.removeAllActions() 
     node?.removeFromParent() 
    } else if (contact.bodyB.categoryBitMask == bubbleCategory) { 
     let node = contact.bodyB.node 
     //Other remove routine 
     node?.removeAllActions() 
     node?.removeFromParent() 
    } 


} 

这里有什么问题?

回答

0

这将呈现现场,它每次都适合我。这不会为场景返回零,因此它将平稳过渡。您还可以设置ignoreSiblingOrder到任何你想要的这条线:skView?.ignoresSiblingOrder = true //or false 这里是我的GameScene:

class GameScene: SKScene { 
override func didMoveToView(view: SKView) { 
    self.backgroundColor = UIColor.redColor() 
} 

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

    for touch in (touches as! Set<UITouch>) { 
     let location = touch.locationInNode(self) 
     println("touch occured in gamescene") 

     let scene:SKScene = myScene() 
     let skView = self.view as SKView? 
     skView!.ignoresSiblingOrder = true 
     scene.scaleMode = .AspectFill 
     scene.size = skView!.bounds.size 
     skView!.presentScene(scene) 


    } 
} 

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

}

+0

评论不适合广泛的讨论;这个对话已经[转移到聊天](http://chat.stackoverflow.com/rooms/82223/discussion-on-answer-by-the-codecomposer-spritekit-transition-wont-work)。 – Taryn