首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >过渡场景精灵套件

过渡场景精灵套件
EN

Stack Overflow用户
提问于 2016-11-08 03:29:40
回答 2查看 65关注 0票数 0

我在转换到不同场景的预定位置时遇到了麻烦。(例如,当Mario进入隧道时,他返回到他离开的原始场景)我能够编写一种方法来到达下一个场景,但节点不会出现在我想要的位置。

这是我转换到第二个场景的代码

代码语言:javascript
复制
func didBeginContact(contact: SKPhysicsContact) {
    _ = contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask

if (contact.bodyA.categoryBitMask == BodyType.cup.rawValue && contact.bodyB.categoryBitMask == BodyType.ball.rawValue) {

touchmain()


} else if (contact.bodyA.categoryBitMask == BodyType.ball.rawValue && contact.bodyB.categoryBitMask == BodyType.cup.rawValue) {

touchmain()

}
}

    func touchmain() {

        let second = GameScene(fileNamed:"GameScene")
        second?.scaleMode = .AspectFill
        self.view?.presentScene(second!, transition: SKTransition.fadeWithDuration(0.5))
    }

如果你们能帮助一位年轻的开发人员,我将非常感激。太爱你了!

EN

回答 2

Stack Overflow用户

发布于 2016-11-08 05:15:02

你有很多方法可以做到这一点。它的一般要点是,只要记住“马里奥的”位置,在你离开场景,并将其传递到下一个场景中的属性。(或者您可以使用委托来获取信息)

如果场景是他从SceneA(主层)开始,转移到SceneB (小钱隧道),然后返回到SceneA(主层),您可以将位置传递给SceneB,并在SceneB中拥有一个存储Mario所在位置的属性。然后,当您传输回SceneA时,只需将该属性传递回SceneA中的一个属性,并相应地定位Mario和SceneA

代码语言:javascript
复制
    func touchmain() {

        let marioPos: CGPoint = Mario.position

        let second = GameScene(fileNamed:"GameScene")
        second.startingPos = marioPos
        second?.scaleMode = .AspectFill
        self.view?.presentScene(second!, transition: SKTransition.fadeWithDuration(0.5))
    }
票数 0
EN

Stack Overflow用户

发布于 2016-11-08 23:26:50

您可以使用SKScene上的userData字段来记住位置:

在第一个场景init中的某个地方,执行以下操作:

代码语言:javascript
复制
userData = [String : NSObject]()

另外,在你的第一个场景中,我们想要重写didMove(to:SKView)来根据你的用户数据设置马里奥的位置:

代码语言:javascript
复制
override func didMove(to:SKView)
{
   super.didMove(to:to)
   if let position = self.userData["position"]
   {
      mario.position = position
   }
}

然后,我们希望在离开场景时实际分配用户数据:

代码语言:javascript
复制
func touchmain() {
        if let userData = self.userData
        {
            userData["marioPosition"] = mario.position
        }
        if let second = GameScene(fileNamed:"GameScene")
        {
            second.scaleMode = self.scaleMode //I assume we do not want to change scaleMode between scenes
            second.userData = userData
            self.view?.presentScene(second, transition: SKTransition.fadeWithDuration(0.5))
        }
        else
        {
            print("Error creating Second scene")
        }
}

当我们回来的时候,我们想把userData转回到第一个屏幕上。这就是我前面提到的didMove发挥作用的地方,这将把马里奥的位置设置为以前的位置。

..。我看不到这段代码,所以试着把它应用到你正在做的事情上

代码语言:javascript
复制
func touchBackToFirst() {

        if let first = GameScene(fileNamed:"GameScene")
        {
            first.scaleMode = self.scaleMode
            first.userData = userData
            self.view?.presentScene(first, transition: SKTransition.fadeWithDuration(0.5))
        }
        else
        {
            print("Error creating Firstscene")
        }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40473080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档