Peek 和 Pop 函数 SpriteKit
Peek and Pop Function SpriteKit
我在 `SKScene' 中有一个菜单。我正在尝试将 Peek 和 Pop 功能集成到其中。我有多种可能的选择,所以我的问题是如何确定哪个被强制触摸。
这是我的代码:
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)
}
}
您将无法像您尝试的那样在 SKScene 或 SKSpriteNode 菜单中使用 Peek 和 Pop,我试图在我的一个游戏中做同样的事情。
Peek 和 Pop 仅适用于 UIKit,特别是它允许您预览 (Peek) 而不是打开 (Pop) UIViewControllers。
在 SpriteKit 中你通常只有 1 个 ViewController, GameViewController。该游戏ViewController 应该只处理您的 SKScene 演示,您的实际 UI is/should 直接在相关 SKScenes 中使用 SpriteKit API 完成,例如 SKLabelNodes、SKSpriteNodes 等。因此,您并没有真正使用 UIKit,也没有太多可以使用 Peek 和 Pop 进行预览的内容。
这有一些例外情况,所以这取决于您制作的游戏类型。例如,在我的一个游戏中,我使用 UICollectionViewController 作为关卡 select 菜单(40 个关卡),因为它们非常适合该场景(单元格重用、平滑滚动等) .因为该菜单是使用 UIKit 制作的,所以我可以在您强制触摸单元格时注册 peek 和 pop。我有另一个 UIViewController 和一些 UILabels,UIImageViews 等我专门用于偷看(见图),当我弹出时我只是开始实际水平.
所以综上所述,在SpriteKit中可以使用Peek和Pop的情况并不多。我也不建议您尝试使用 UIKIt 设计您的 UI,以便您可以使用 Peek 和 Pop。希望 Apple 有一天会更新 API,这样什么时候可以查看和弹出 SKNodes 或 SKScenes,那就太棒了。
希望对您有所帮助
我在 `SKScene' 中有一个菜单。我正在尝试将 Peek 和 Pop 功能集成到其中。我有多种可能的选择,所以我的问题是如何确定哪个被强制触摸。
这是我的代码:
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)
}
}
您将无法像您尝试的那样在 SKScene 或 SKSpriteNode 菜单中使用 Peek 和 Pop,我试图在我的一个游戏中做同样的事情。
Peek 和 Pop 仅适用于 UIKit,特别是它允许您预览 (Peek) 而不是打开 (Pop) UIViewControllers。
在 SpriteKit 中你通常只有 1 个 ViewController, GameViewController。该游戏ViewController 应该只处理您的 SKScene 演示,您的实际 UI is/should 直接在相关 SKScenes 中使用 SpriteKit API 完成,例如 SKLabelNodes、SKSpriteNodes 等。因此,您并没有真正使用 UIKit,也没有太多可以使用 Peek 和 Pop 进行预览的内容。
这有一些例外情况,所以这取决于您制作的游戏类型。例如,在我的一个游戏中,我使用 UICollectionViewController 作为关卡 select 菜单(40 个关卡),因为它们非常适合该场景(单元格重用、平滑滚动等) .因为该菜单是使用 UIKit 制作的,所以我可以在您强制触摸单元格时注册 peek 和 pop。我有另一个 UIViewController 和一些 UILabels,UIImageViews 等我专门用于偷看(见图),当我弹出时我只是开始实际水平.
所以综上所述,在SpriteKit中可以使用Peek和Pop的情况并不多。我也不建议您尝试使用 UIKIt 设计您的 UI,以便您可以使用 Peek 和 Pop。希望 Apple 有一天会更新 API,这样什么时候可以查看和弹出 SKNodes 或 SKScenes,那就太棒了。
希望对您有所帮助