我有一个用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)
答案 0 :(得分:3)
您的主要问题在于以下几行代码:
let skScene = scnView.overlaySKScene
scnView.overlaySKScene = skScene
这两行是完全无用的行为。默认情况下,overlaySKScene
会为nil
返回scnView
,因为它没有SKScene。然后将此nil
保存到skScene
对象,然后将其设置回scnView.overlaySKScene
(即使没有nil
,执行此操作也毫无用处)
然后当你尝试这样做时:
scnView.overlaySKScene?.addChild(base)
由于addChild
为scnView.overlaySKScene
, nil
未致电。这就是为什么你最后什么也没有。
要解决此问题,您需要创建SKScene
对象,例如:
let overlayScene = SKScene(size: CGSizeMake(100, 100))
然后,您可以为position
对象设置base
,如下所示:
base.position = CGPointMake(50, 0)
然后将base
对象添加到场景中:
overlayScene.addChild(base)
最后将场景设置为叠加,如下所示:
scnView.overlaySKScene = overlayScene