如何创建overlaySKScene SWIFT Xcode以显示HUD或控件?

时间:2015-11-17 16:22:13

标签: ios swift sprite-kit scenekit

我有一个用SceneKit设置的场景。这是一款使用SceneKit的游戏。我正在尝试制作HUD,因此我可以使用SpriteKit将控件放在屏幕上。问题是我没有完整的代码,我不知道我错过了什么。你能正确改写吗?我试图在名为base的屏幕上添加一个sprite图像,但是我不确定在你施放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)

1 个答案:

答案 0 :(得分:3)

您的主要问题在于以下几行代码:

let skScene = scnView.overlaySKScene
scnView.overlaySKScene = skScene

这两行是完全无用的行为。默认情况下,overlaySKScene会为nil返回scnView,因为它没有SKScene。然后将此nil保存到skScene对象,然后将其设置回scnView.overlaySKScene(即使没有nil,执行此操作也毫无用处)

然后当你尝试这样做时:

scnView.overlaySKScene?.addChild(base)
由于addChildscnView.overlaySKScene

nil未致电。这就是为什么你最后什么也没有。

要解决此问题,您需要创建SKScene对象,例如:

let overlayScene = SKScene(size: CGSizeMake(100, 100))

然后,您可以为position对象设置base,如下所示:

base.position = CGPointMake(50, 0)

然后将base对象添加到场景中:

overlayScene.addChild(base)

最后将场景设置为叠加,如下所示:

scnView.overlaySKScene = overlayScene