如何从 SKView 转换到 SCNView?

Posted

技术标签:

【中文标题】如何从 SKView 转换到 SCNView?【英文标题】:How to transition to SCNView from a SKView? 【发布时间】:2015-11-16 09:11:03 【问题描述】:

嘿,好的,我有一个 UIView 只是标准的默认控制器,但是我在另一个 .swift 文件中有一个 SCNView,所以我可以从标准的 UIViewController 转换为 SKScene,但我无法转换从SKSceneSCNcene 的关键在于我的代码

 class PlayController: UIViewController, ADBannerViewDelegate, SKPhysicsContactDelegate, SKSceneDelegate, SCNSceneRendererDelegate, SCNPhysicsContactDelegate


    let scnView = self.view as! SCNView
    let skScene = scnView.overlaySKScene

    scnView.overlaySKScene = skScene
    scnView.backgroundColor = UIColor.whiteColor()

    scnView.scene = FieldScene
    scnView.delegate = self

    scnView.allowsCameraControl = true
    scnView.showsStatistics = false

如上所示,我尝试转换到的控制器以 UIViewController 开始,然后再往下放置为SCNView。 在这行代码中让 scnView = self.view as! SCNView 但是当我试图从 SKScene 过渡到这个场景时,我将如何在代码 Swift 中做到这一点?

我开始使用的控制器如下所示

import iAd
import UIKit
import GameKit
import SceneKit
import StoreKit
import SpriteKit
import QuartzCore
import Foundation
import AVFoundation
import AudioToolbox

//============================================================
class MainMenuController: SKScene, ADBannerViewDelegate, SKPhysicsContactDelegate, SKSceneDelegate, SCNSceneRendererDelegate, SCNPhysicsContactDelegate


override func didMoveToView(view: SKView) 

【问题讨论】:

还需要给FieldScene加上括号,所以scnView.scene = FieldScene() 【参考方案1】:

overlaySKScene

let skScene = scnView.overlaySKScenescnView.overlaySKScene = skScene 的实现应该更改,因为它们无效

创建 SKScene 对象:let overlayScene = SKScene(size: CGSizeMake(200, 200)).

设置基础对象的位置:base.position = CGPointMake(75, 0)

将基础对象添加到场景:overlayScene.addChild(base)

设置场景叠加:scnView.overlaySKScene = overlayScene.

过渡

您可以通过调用视图的 presentScene:withTransition:incomingPointOfView:completionHandler: 方法来添加过渡。

    sceneView.presentScene(nextSceneToLoad(),
    withTransition:skTransition,
    incomingPointOfView:nil, completionHandler:nil)

另一个例子。

let transition = SKTransition.pushWithDirection(.Right, duration: 1.0)
self.sceneView?.presentScene(SCNScene(), withTransition: transition, incomingPointOfView: nil, completionHandler: nil)

overlaySKScene API Reference

presentScene API Reference

【讨论】:

以上是关于如何从 SKView 转换到 SCNView?的主要内容,如果未能解决你的问题,请参考以下文章

如何检测 SKSpriteNode 和 SKView SpriteKit 之间的冲突

如何从 ARSKView(或 SKView)帧创建视频,包括微音频(ios 11)

尝试转换场景时无法将 UIView 的值转换为 SCNView [重复]

如何在 SKView 之上添加 UIView?

如何使 SKView 的背景颜色清晰

SceneKit:在 SCNView 上渲染 SpriteKit 粒子系统时应用程序崩溃,当所有代码似乎都是系统代码的一部分时如何调试