2017-02-12 41 views
1

我在`SKScene'中有一个菜单。我正在尝试将Peek和Pop功能集成到它中。我有多种可能的选择,所以我的问题是如何确定哪一个正在被触摸。Peek和Pop函数SpriteKit

这是我的代码:

import SpriteKit 
import UIKit 

class Menu: SKScene, UIViewControllerPreviewingDelegate { 

//SETUP Menu 


func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? { 
     return UIViewController() 
    } 

    //POP 
    func previewingContext(_ previewingContext: UIViewControllerPreviewing, commit viewControllerToCommit: UIViewController) { 
     return 
    } 

} 

GameViewController.swift:

import UIKit 
import SpriteKit 

class GameViewController: UIViewController { 


    override func viewDidLoad() { 
    super.viewDidLoad() 

    if let scene = GameScene(fileNamed:"GameScene") { 
     if self.traitCollection.forceTouchCapability == .available { 
      registerForPreviewing(with: scene as! UIViewControllerPreviewingDelegate, sourceView: scene.view!) 
      } 
     } 

     // Move to Menu 

} 
} 

我敢肯定,我要传递的信息在sourceView领域。但由于这是在GameViewController中,我不知道该怎么做。而且我不知道如何在菜单内做到这一点,我会在哪里放这个代码?

if let scene = GameScene(fileNamed:"GameScene") { 
      if self.traitCollection.forceTouchCapability == .available { 
       registerForPreviewing(with: scene as! UIViewControllerPreviewingDelegate, sourceView: ButtonPressed) 
      } 
     } 

回答

0

您将无法使用皮克和流行的SKScene或SKSpriteNode菜单像你想,我试图做同样的在我的游戏之一。

Peek和Pop仅适用于UIKit,特别是它允许您预览(Peek)和打开(Pop)UIViewControllers。

在SpriteKit中,通常只有1个ViewController,GameViewController。该GameViewController应该只处理您的SKScene演示文稿,您的实际UI应该直接在相关SKScenes中使用SpriteKit API完成,例如SKLabelNodes,SKSpriteNodes等。因此,您不会真正使用UIKit,并且没有太多可以使用Peek和Pop预览。

有一些例外,所以这取决于你正在做什么样的游戏。例如,在我的一个游戏中,我为我的关卡选择菜单(40关卡)使用了UICollectionViewController,因为它们非常适合该场景(单元重用,平滑滚动等)。由于该菜单是由UIKit制作的,因此当您强制触摸单元格时,我可以注册窥视和弹出。我比另一个UIViewController与一些UILabels,UIImageViews等我专门用于偷看(见图片),当我弹出我只是开始实际的水平。

所以总之,在SpriteKit中可以使用Peek和Pop的情况并不多。我也不会推荐尝试用UIKIt设计你的UI,以便你可以使用Peek和Pop。希望Apple有一天能够更新API,以便能够在SKNodes或SKScenes中查看并弹出时,这会非常棒。

希望这有助于

enter image description here

+0

谢谢,可惜我不能重新设计的菜单,因为它是一个游戏,必须SpriteKit进行。 –

+0

不客气。我不会重新设计你的菜单,它使用SpriteKit中的UIKit笨重(除了可能的ColletionViews,ScrollViews)。如果您还没有这么做,请查看3D touch快速操作,它们可以轻松集成到SpriteKit中。快乐编码 – crashoverride777

+0

是的,我有快速行动 –