ios - 将 UIView 添加到 SpriteKit 游戏的场景后面

标签 ios sprite-kit swift2

我正在尝试在 swift2 中制作一个带有降雪效果的降临节日历。我在使用 SpiteKit 的同时使用了游戏模板。

到目前为止,这是我的代码:

GameScene.swift

import SpriteKit

class GameScene: SKScene {
    /*override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        if let touch = touches.first {
            let location = touch.locationInNode(self)
            print(location)
        }
    }*/

    func test()
    {
        //Generate Doors

        //Initilization
        var adventDoors = [AdventDoor]()
        let offset = CGVector(dx: 10,dy: 10)
        var size = CGRectMake(offset.dx, offset.dy, 60, 60)

        var ypos:CGFloat = 20
        var xpos:CGFloat = 10
        var index = 0
        var xDoor = AdventDoor(frame: size)
        let randomIdentifier = [Int](1...24).shuffle()
        for _ in 1...4
        {
            for i in 1...6
            {
                size = CGRectMake(xpos, ypos, 60, 60)
                xDoor = AdventDoor(frame: size)
                xDoor.opaque = false
                xDoor.restorationIdentifier = "\(randomIdentifier[index])"
                xDoor.generateDoor()
                adventDoors.append(xDoor)
                print("1...6")
                ypos += 80
                //xpos += 20
                index++

                if i == 6
                {
                    print("Moving to next view")
                }

            }

            xpos += 80
            ypos = 20
        }

        size = CGRectMake(10, 500, 300, 60)
        xDoor = AdventDoor(frame: size)
        xDoor.opaque = false
        xDoor.restorationIdentifier = "\(25)"
        xDoor.generateDoor()
        adventDoors.append(xDoor)


        index = 0

        for door in adventDoors
        {
            index++
            self.view?.addSubview(door)
        }
        print("\(index) doors were added")
    }
}

GameViewController.swift

class GameViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()



        if let scene = GameScene(fileNamed:"GameScene") {

            // Configure the view.
            let skView = self.view as! SKView
            //skView.showsFPS = true
            //skView.showsNodeCount = true

            /* Sprite Kit applies additional optimizations to improve rendering performance */
            skView.ignoresSiblingOrder = true

            /* Set the scale mode to scale to fit the window */
            scene.scaleMode = .AspectFill
            scene.backgroundColor = UIColor.greenColor()
            skView.presentScene(scene)

            scene.test()

            //Snow
            let wrappedSnowPath = NSBundle.mainBundle().pathForResource("Snow", ofType: "sks")
            if let snowPath = wrappedSnowPath
            {
                let snowEmitter:SKEmitterNode = NSKeyedUnarchiver.unarchiveObjectWithFile(snowPath) as! SKEmitterNode
                let screenBounds = UIScreen.mainScreen().bounds
                snowEmitter.position = CGPointMake(screenBounds.width, screenBounds.height)
                scene.addChild(snowEmitter)
            }
        }
    }

    override func shouldAutorotate() -> Bool {
        return true
    }

    override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
        if UIDevice.currentDevice().userInterfaceIdiom == .Phone {
            return .AllButUpsideDown
        } else {
            return .All
        }
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Release any cached data, images, etc that aren't in use.
    }

    override func prefersStatusBarHidden() -> Bool {
        return true
    }
}

AdventDoor.swift 只包含一个自定义 UIView (AdventDoor) 以及一些其他功能

这是它的样子。

enter image description here

如您所见,雪 SKEmitterNode 粒子在 AdventDoors 后面而不是前面。

如何让我的雪显示在 UIView Advent Doors 前面而不是后面?

最佳答案

不是为门添加 addsubview,您需要做的是重新安排 View 的布局方式。您需要的是 UIView 作为主视图,然后将 SKView 作为 subview 添加到主视图。然后如果你想在场景创建过程中添加门,你需要做 self.view.superview.insertSubView(door, atIndex:0)self.view.superview。 insertSubView(door, belowSubView:self.view) 这样门就放在场景 subview 的后面

关于ios - 将 UIView 添加到 SpriteKit 游戏的场景后面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33972461/

相关文章:

ios - Realm 应用程序大小与 Core Data 的比较

swift2 - 在 Swift 2 中使用 split 函数

php - 如何在Swift 3.0中将JSON数据提取到UIPickerView中?

sprite-kit - 在后台任务中创建 SKNode

iphone - 如何使用 facebook ios sdk 发出好友请求?

swift - 5 秒后开始过渡

ios - 尝试从 GameLayer 访问类

ios - 使用 Swift 在 ScrollView 中显示警报

ios - RMStore In App Purchase 未知产品标识符

ios - 如何从 NSManagedObject 属性派生核心数据属性键?