4

我对处理这个问题的正确方法有点困惑:

在我的游戏中,我允许玩家从 5 个区域中进行选择。一个区域只不过是屏幕上的一个矩形,您在该区域中完成的百分比。整个列表居中,看起来不错。

..最终会有更多区域,但我不希望它们位于多行(我希望玩家滑动以滚动它们)。

迄今为止,我的游戏的所有功能都是使用 SpriteKit 实现的(我只有一个视图控制器,除了展示我所有的 SKScenes 之外我不使用它)。

为了实现上面想要的功能,我现在需要引入一个带有 UICollectionView 的视图控制器吗?

我宁愿保持一致并且只使用与 SKView 相关的代码,但我是否会通过允许滑动/滚动来重新创建 UICollectionView?任何人都可以推荐一种在 SpriteKit 中执行此操作的方法,或者您会说这通常是一个坏主意吗?

非常感谢!

4

2 回答 2

3

如果您希望使用 SpriteKit 代码执行此操作,只需创建一个 SKNode,将所有内容放在此 SKNode 中,如果您有可视空间来查看所有内容,请按照您期望的方式布置所有内容,然后移动节点的位置基于您的预期方向。(在您的情况下,您想移动 SKNodes x 位置)

然后只需使用滑动手势来捕捉滑动,并编写一些代码来处理您希望滚动发生的方式。我不太熟悉如何UICollectionView滚动,所以我无法回答你如何让它感觉相同。

于 2016-02-23T16:30:09.467 回答
3

要纯粹在 SpriteKit 中执行此操作,您实际上创建了一个 moveableNode 并将所有菜单内容添加到该节点,然后在 touchesMoved 中移动该节点。您必须跟踪它的位置并调整速度等。

https://codedump.io/share/etvt4SwQI6iR/1/how-to-create-a-vertical-scrolling-menu-in-spritekit

我认为这种菜单是在 SpriteKit 中使用 UIKit 实际上更好的罕见场合,例如 UIScrollViews 或 UICollectionViews。

尝试在 SpriteKit 中复制它们有点棘手,需要一些额外的代码,而且不会给你很好的滚动/反弹效果。

如果您正在寻找什么,您可以在 Spritekit 中创建一个 UIColletionView,您只需要子类。我正在为我正在开发的游戏使用一个作为关卡选择屏幕。

创建一个新的快速文件

class CustomCollectionView: UICollectionView {

// MARK: - Init
init(frame: CGRect) {
    super.init(frame: frame)

    /// set up
    backgroundColor = UIColor.clearColor()
    #if os(iOS)
    pagingEnabled = true
    #endif
    self.frame = frame
    delegate = self
    dataSource = self
    indicatorStyle = .White
    scrollEnabled = true
    canCancelContentTouches = false

    registerClass... // register your cells
 }

// MARK: - Delegates
extension CustomCollectionView: UICollectionViewDataSource {

func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
    return 5
}

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return 8
}

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
 .......
 }

然后在您的 SKScenes 中,您可以添加集合视图

  weak var collectionView: CustomCollectionView!

  collectionView = CustomCollectionView(frame: view!.frame)
  view!.addSubview(collectionView)

您必须阅读一些教程,以便熟悉 UICollectionView,例如如何创建自定义单元格和常规设置等。您还必须确保在更改 SKScenes 时删除 collectionView

 collectionView.removeFromSuperview()

这是你要问的吗?

于 2016-02-22T12:49:42.593 回答