SpriteKit 和可滚动列表
Posted
技术标签:
【中文标题】SpriteKit 和可滚动列表【英文标题】:SpriteKit and Scrollable List 【发布时间】:2014-06-05 19:54:19 【问题描述】:我一直在尝试找出一种“简单”的方法来为我的 SpriteKit 游戏创建一个可滚动的垂直列表。
我将使用它来实现游戏的商店/升级部分,因此我希望用户能够向下滚动列表以查看可能的不同升级。
我看过很多关于将 UIScrollView 集成到 SpriteKit 的帖子,但其中大多数似乎滚动整个屏幕。
到目前为止我所拥有的是:
-(void) createSceneContents
[super createSceneContents];
_scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(10,100, 250, 200)];
_scrollView.contentSize = CGSizeMake(2000, 120);
_scrollView.scrollEnabled = YES;
_scrollView.showsHorizontalScrollIndicator = YES;
_scrollView.backgroundColor = [UIColor brownColor];
[self.view addSubview:_scrollView];
//Test sprites for scrolling and zooming
SKSpriteNode *greenTestSprite = [SKSpriteNode spriteNodeWithColor:[SKColor greenColor]
size:CGSizeMake(25, 25)];
[greenTestSprite setName:@"greenTestSprite"];
greenTestSprite.position = CGPointMake(25, 125);
[self addChild:greenTestSprite];
//[self addChild: [self newMenuNode]];
我正在尝试将绿色测试精灵添加到 UIScrollView 中的最简单方法是什么。我无法理解其他人这样做的方式,因为他们似乎将 UIScrollView 的滚动与 SKView 连接起来,使屏幕看起来像是在滚动。
我确信有一种更简单的方法可以做到这一点,但现在已经搜索了一段时间。
任何帮助将不胜感激。
提前致谢。
【问题讨论】:
我已经给出了另一个答案,但如果你真的想要在滚动视图中使用 [_scrollview addChild:greenTestSprite],你应该使用它。您当前正在将其添加到主视图中 谢谢,我想我可以做一些事情来允许点击要检查的精灵。 @davbryn 顺便说一句,这不起作用:-( 【参考方案1】:如果可能,我会避免使用UIKit
组件。当您有一个作为UIKit
组件的父级的UIView
时,很难与位于SKView
中的SpriteKit
组件进行交互。继承SKNode
并制作一个使用SKView
上的手势识别器进行滚动的“ScrollingNode”非常容易。这是一个例子:
https://github.com/JenDobson/SpriteKitScrollingNode
另一个值得一看的好教程是http://www.raywenderlich.com/44270/sprite-kit-tutorial-how-to-drag-and-drop-sprites。转到最后关于手势识别器的部分。
【讨论】:
嘿,谢谢你看这个。这看起来正是我需要的。我设法使用了 UIScrollView,但它有问题,最后只是放弃了整个想法,而是用按钮来滚动。今晚我会试试这个! 您好 Jen,您知道有什么方法可以不让您的 ScrollingNode 滚动到全屏吗?我只需要它在屏幕的一小部分内滚动。绕了很远,想不通。提前致谢! 嗨 Dave3of5,我已经更新了我的代码库,希望你能找到一些有用的东西。基本上我做了两件事:(1) 使用 SKCropNode 来屏蔽不应显示的滚动内容,以及 (2) 为滚动节点实现委托方法gestureRecognizer:shouldReceiveTouch
以忽略任何超出滚动节点父级的触摸。在我发布的代码中查看JADPartScrollingScene
。理想情况下,您可能希望创建一个名为 SKScrollingWindow
之类的新类来封装该场景的 init 中发生的所有事情。【参考方案2】:
您可以在SpriteKit
应用程序中使用UIKit
。
如果您使用UIScrollView
,您最终将不得不在重复使用单元格、布局、用户交互等方面弄脏您的手。您实际上可以使单元格看起来相当不错(并且单元格是一个UIView
,所以你可以在那里解雇一堆子视图)如果你只使用(和定制)一个UITableView
你的层次结构是:
场景: 表格视图
【讨论】:
以上是关于SpriteKit 和可滚动列表的主要内容,如果未能解决你的问题,请参考以下文章