2014-10-06 94 views
4

我正在用3种不同的SKScenes(scene1,scene2,scene3)开发游戏。在GameViewController我初始化所有的人都像这样:如何正确使用Swift在SpriteKit中切换SKScenes?

class GameViewController: UIViewController { 
    var hero = Hero() 
    var skView: SKView! 

    var scene1: SKScene! 
    var scene2: SKScene! 
    var scene3: SKScene! 

    override func viewDidLoad() { 
    super.viewDidLoad() 

    // init scenes 
    scene1 = SKScene(size: view.bounds.size, hero: hero) 
    scene2 = SKScene(size: view.bounds.size, hero: hero) 
    scene3 = SKScene(size: view.bounds.size, hero: hero) 

    scene1.scaleMode = .AspectFill 
    scene2.scaleMode = .AspectFill 
    scene3.scaleMode = .AspectFill 

    // set view 
    skView = self.view as SKView 

    // present the first scene 
    skView.presentScene(scene1) 
} 

我的想法是在第一和现在以后提出的第一个场景(开关等来)其他场景(即当英雄强)。在每个场景中,英雄精灵都是这样添加的:

func addHero() { 
    let heroSprite = SKSpriteNode(imageNamed: "hero") 
    hero.sprite = heroSprite 
    heroSprite.position = CGPoint(x: size.width/4, y: size.height/2) 
    addChild(heroSprite) 
    } 

而在更新方法中,通过触摸来更新英雄位置。

func update() { 
    if touching { 
    hero.position++ 
    } 
} 

英雄职业是这样的:

class Hero { 
    var sprite: SKSpriteNode? 
} 

的问题是: 主人公是可移动的,当第一现场(SCENE1)初始化接触。这意味着,英雄不能再使用上面的代码移动。

任何人都可以给我一些建议我做错了什么?提前致谢!

PS:完整的代码可以在Github找到。

+1

您可以将您的更新功能,也应该使用触摸移动功能通过触摸来移动你的精灵。 – 2014-10-07 07:08:53

+0

是的,update()函数非常简单。我编辑了这篇文章。我正在思考3个场景在初始化时发生了什么。他们都在同一时间运行,还是只有在提交时才运行? – Sifeng 2014-10-07 09:18:57

+0

你究竟什么时候提出你的下一个场景,例如:在同一个函数中,在另一个函数中还是在另一个类中? – 2014-10-07 20:23:55

回答