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 和可滚动列表的主要内容,如果未能解决你的问题,请参考以下文章

SpriteKit:一种将大型纹理列为缩略图的有效方法

SpriteKit 多向滚动

SpriteKit,Swift - 滚动视图不显示

SpriteKit 中的无限滚动背景

如何在 SpriteKit 中创建有限的、可滚动的背景?

以编程方式使用 Swift 在 Spritekit 中滚动视图(无情节提要)