首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何解决过渡过程中SKTransition效果不起作用?

如何解决过渡过程中SKTransition效果不起作用?
EN

Stack Overflow用户
提问于 2018-05-21 03:23:23
回答 1查看 142关注 0票数 1

从场景过渡到MainScene时,SKTransition不起作用。它只是跳转到MainScene,没有过渡效果。你可以在下面找到代码。

代码语言:javascript
复制
import UIKit
import SpriteKit
import GameplayKit
import FBSDKLoginKit
import TwitterKit
import Firebase
import GoogleSignIn
import GoogleMobileAds

protocol SceneManagerDelegate {
    func presentMainScene()
    func presentGameScene()
    func presentWelcomeScene()
    func presentGameOverScene()
    func presentSettingsScene()
}

class GameViewController: UIViewController, TransitionDelegate, GIDSignInDelegate, GIDSignInUIDelegate, GADRewardBasedVideoAdDelegate, UIAlertViewDelegate{
    /.....
}
/....
extension GameViewController: SceneManagerDelegate {            
    func presentSettingsScene() {
        let settingsScene = SettingsScene(fileNamed: "SettingsScene")
        settingsScene?.sceneManagerDelegate = self
        present(scene: settingsScene!)
    }

    func presentGameOverScene() {
        let gameOverScene = GameOverScene(fileNamed: "GameOverScene")
        gameOverScene?.sceneManagerDelegate = self
        present(scene: gameOverScene!)
    }    

    func presentWelcomeScene() {
        let welcomeScene = WelcomeScene(fileNamed: "WelcomeScene")
        welcomeScene?.sceneManagerDelegate = self
        present(scene: welcomeScene!)
    }

    func presentMainScene() {
        let mainScene = MainScene(fileNamed: "MainScene")
        mainScene?.sceneManagerDelegate = self
        present(scene: mainScene!)
    }

    func presentGameScene() {
        let gameScene = GameScene(fileNamed: "GameScene")
        gameScene?.sceneManagerDelegate = self
        present(scene: gameScene!)
    }

    func presentMatchingScene() {
        let matchingScene = MatchingScene(fileNamed: "MatchingScene")
        matchingScene?.sceneManagerDelegate = self
        present(scene: matchingScene!)
    }    

    func present(scene: SKScene) {
        let transition = SKTransition.reveal(with: .left, duration: 1)
        if let view = self.view as! SKView? {
            if let gestureRecognizers = view.gestureRecognizers {
                for recognizer in gestureRecognizers {
                    view.removeGestureRecognizer(recognizer)
                }
            }

            scene.scaleMode = .aspectFit
            scene.delegate = self as TransitionDelegate
            view.presentScene(scene, transition: transition)
            view.ignoresSiblingOrder = true
            view.showsNodeCount = true
            view.showsFPS = true
        }
    }
}

从其他场景调用该方法

代码语言:javascript
复制
var sceneManagerDelegate: SceneManagerDelegate? // sceneManagerDelegate.present....
EN

回答 1

Stack Overflow用户

发布于 2018-05-21 06:05:59

您的转换函数是正常的,但您的委托实现是错误的。在您的present(scene:)方法中,您将scene.delegate = self设置为TransitionDelegate,它将不在那里。我已经在in method in Swift 4中实现了你的转换代码,它工作得很好。你可以使用see this tutorial for Delegate implementation for transition in SpriteKit。另请阅读KnightOfDragon提供的this answer

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50438598

复制
相关文章

相似问题

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