如何创建 overlaySKScene SWIFT Xcode 来显示 HUD 或控件?
How to create a overlaySKScene SWIFT Xcode to display a HUD or controls?
我有一个使用 SceneKit 设置的场景。这是一款使用 SceneKit 的游戏。我正在尝试制作一个 HUD,因此我可以使用 SpriteKit 将控件放在屏幕上。问题是我不太了解所有代码,而且我不知道我缺少什么。你能正确重写吗?我尝试在名为 base 的屏幕上添加精灵图像,但我不确定在投射 SpriteKit overlaySKScene 后是否就是这样添加子画面的?
代码:
import iAd
import UIKit
import GameKit
import SceneKit
import StoreKit
import SpriteKit
import QuartzCore
import Foundation
import AVFoundation
import AudioToolbox
//============================================================
class GameViewController: UIViewController, ADBannerViewDelegate, SKPhysicsContactDelegate, SKSceneDelegate, SCNSceneRendererDelegate, SCNPhysicsContactDelegate{
let base = SKSpriteNode(imageNamed:"VirtualJoystickBase")
override func viewDidLoad() {
super.viewDidLoad()
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
base.size = CGSize(width: 100, height: 100)
base.anchorPoint = CGPointMake(-3.4, -5.2)
scnView.overlaySKScene?.addChild(base)
您的主要问题出在这些代码行中:
let skScene = scnView.overlaySKScene
scnView.overlaySKScene = skScene
这两行是完全没用的地方。默认情况下 overlaySKScene
returns nil
用于其 scnView
因为它没有 SKScene。而你把这个nil
保存到skScene
对象中,然后再把它设置回scnView.overlaySKScene
(即使没有nil
,做这个动作也是没用的)
然后当你尝试这样做时:
scnView.overlaySKScene?.addChild(base)
addChild
没有调用,因为 scnView.overlaySKScene
是 nil
。这就是为什么你最后什么都没有。
要解决此问题,您需要创建 SKScene
对象,例如:
let overlayScene = SKScene(size: CGSizeMake(100, 100))
然后您可以像这样为您的 base
对象设置 position
:
base.position = CGPointMake(50, 0)
然后添加base
对象到场景:
overlayScene.addChild(base)
最后像这样设置场景叠加:
scnView.overlaySKScene = overlayScene
我有一个使用 SceneKit 设置的场景。这是一款使用 SceneKit 的游戏。我正在尝试制作一个 HUD,因此我可以使用 SpriteKit 将控件放在屏幕上。问题是我不太了解所有代码,而且我不知道我缺少什么。你能正确重写吗?我尝试在名为 base 的屏幕上添加精灵图像,但我不确定在投射 SpriteKit overlaySKScene 后是否就是这样添加子画面的?
代码:
import iAd
import UIKit
import GameKit
import SceneKit
import StoreKit
import SpriteKit
import QuartzCore
import Foundation
import AVFoundation
import AudioToolbox
//============================================================
class GameViewController: UIViewController, ADBannerViewDelegate, SKPhysicsContactDelegate, SKSceneDelegate, SCNSceneRendererDelegate, SCNPhysicsContactDelegate{
let base = SKSpriteNode(imageNamed:"VirtualJoystickBase")
override func viewDidLoad() {
super.viewDidLoad()
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
base.size = CGSize(width: 100, height: 100)
base.anchorPoint = CGPointMake(-3.4, -5.2)
scnView.overlaySKScene?.addChild(base)
您的主要问题出在这些代码行中:
let skScene = scnView.overlaySKScene
scnView.overlaySKScene = skScene
这两行是完全没用的地方。默认情况下 overlaySKScene
returns nil
用于其 scnView
因为它没有 SKScene。而你把这个nil
保存到skScene
对象中,然后再把它设置回scnView.overlaySKScene
(即使没有nil
,做这个动作也是没用的)
然后当你尝试这样做时:
scnView.overlaySKScene?.addChild(base)
addChild
没有调用,因为 scnView.overlaySKScene
是 nil
。这就是为什么你最后什么都没有。
要解决此问题,您需要创建 SKScene
对象,例如:
let overlayScene = SKScene(size: CGSizeMake(100, 100))
然后您可以像这样为您的 base
对象设置 position
:
base.position = CGPointMake(50, 0)
然后添加base
对象到场景:
overlayScene.addChild(base)
最后像这样设置场景叠加:
scnView.overlaySKScene = overlayScene