SpriteKit 中的水平滚动(对比 viewcontroller)
Horizontal scrolling in SpriteKit (vs. a viewcontroller)
我对处理这个问题的正确方法有点困惑:
在我的游戏中,我允许玩家从 5 个区域中进行选择。一个区域只不过是屏幕上的一个矩形,其中包含您在该区域的完成百分比。整个列表居中,看起来不错。
..最终会有更多区域,但我不希望它们位于多行(我希望玩家滑动以滚动浏览它们)。
迄今为止,我的游戏的所有 功能都是使用 SpriteKit 实现的(我只有一个视图控制器,除了展示所有功能外我不使用它我的 SKScenes 中)。
为了实现上述所需的功能,我现在是否需要引入带有 UICollectionView 的视图控制器?
我宁愿保持一致,只使用与 SKView 相关的代码,但我是否会通过允许 swiping/scrolling 来重新创建 UICollectionView?谁能推荐一种在 SpriteKit 中执行此操作的方法,或者您会说这通常是个坏主意吗?
非常感谢!
要纯粹在 SpriteKit 中执行此操作,您实际上创建了一个 moveableNode 并将所有菜单内容添加到该节点,然后在 touchesMoved 中移动该节点。你必须跟踪它的位置和 fiddle 速度等
https://codedump.io/share/etvt4SwQI6iR/1/how-to-create-a-vertical-scrolling-menu-in-spritekit
我认为这种菜单是很少见的在SpriteKit中使用UIKit实际上更好的情况,例如UIScrollViews或UICollectionViews。
尝试在 SpriteKit 中复制它们有点棘手,需要一些额外的代码,而且不会给您很好的 scrolling/bounce 效果。
如果您正在寻找,您可以在 Spritekit 中创建一个 UIColletionView,您只需要子类化。我正在为我正在开发的游戏使用一个关卡 select 屏幕。
创建一个新的 swift 文件
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()
这是你要问的吗?
如果你想用 SpriteKit 代码做到这一点,只需创建一个 SKNode,将所有内容放在这个 SKNode 中,如果你有视觉 [=15] =] 查看所有内容,然后根据您的预期方向移动节点的位置。 (在你的例子中,你想移动 SKNodes x 位置)
然后只需使用滑动手势来捕捉滑动,并编写一些代码来处理您希望滚动发生的方式。我不太熟悉 UICollectionView
的滚动方式,所以我无法就如何让它有同样的感觉给你一个答案。
我对处理这个问题的正确方法有点困惑:
在我的游戏中,我允许玩家从 5 个区域中进行选择。一个区域只不过是屏幕上的一个矩形,其中包含您在该区域的完成百分比。整个列表居中,看起来不错。
..最终会有更多区域,但我不希望它们位于多行(我希望玩家滑动以滚动浏览它们)。
迄今为止,我的游戏的所有 功能都是使用 SpriteKit 实现的(我只有一个视图控制器,除了展示所有功能外我不使用它我的 SKScenes 中)。
为了实现上述所需的功能,我现在是否需要引入带有 UICollectionView 的视图控制器?
我宁愿保持一致,只使用与 SKView 相关的代码,但我是否会通过允许 swiping/scrolling 来重新创建 UICollectionView?谁能推荐一种在 SpriteKit 中执行此操作的方法,或者您会说这通常是个坏主意吗?
非常感谢!
要纯粹在 SpriteKit 中执行此操作,您实际上创建了一个 moveableNode 并将所有菜单内容添加到该节点,然后在 touchesMoved 中移动该节点。你必须跟踪它的位置和 fiddle 速度等
https://codedump.io/share/etvt4SwQI6iR/1/how-to-create-a-vertical-scrolling-menu-in-spritekit
我认为这种菜单是很少见的在SpriteKit中使用UIKit实际上更好的情况,例如UIScrollViews或UICollectionViews。
尝试在 SpriteKit 中复制它们有点棘手,需要一些额外的代码,而且不会给您很好的 scrolling/bounce 效果。
如果您正在寻找,您可以在 Spritekit 中创建一个 UIColletionView,您只需要子类化。我正在为我正在开发的游戏使用一个关卡 select 屏幕。
创建一个新的 swift 文件
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()
这是你要问的吗?
如果你想用 SpriteKit 代码做到这一点,只需创建一个 SKNode,将所有内容放在这个 SKNode 中,如果你有视觉 [=15] =] 查看所有内容,然后根据您的预期方向移动节点的位置。 (在你的例子中,你想移动 SKNodes x 位置)
然后只需使用滑动手势来捕捉滑动,并编写一些代码来处理您希望滚动发生的方式。我不太熟悉 UICollectionView
的滚动方式,所以我无法就如何让它有同样的感觉给你一个答案。