在SKSpriteKit中创build可滚动表的正确方法是什么?
我需要一种方式来显示排行榜 – 最好的用户分数(本地用户,本地分数)。
我是否需要为这种事情创build我自己的“节点”,或者最好使用具有透明背景的SKView上方的UITableView?
我使用的方法是:
-
在场景的didMoveToView:方法中,设置一个UIScrollView实例。 设置你需要的所有属性,并确保也设置它的委托,设置隐藏=是,并将其panGestureREcognizer添加到视图手势识别器集合。
-
在willMoveFromView中:将其撕下并清理干净。
-
在scrollview委托中,实现scrollViewDidScroll :. 在这里,您可以使用滚动视图的contentOffset点来调整节点的位置。
我已经实现了一个不可用的节点,我将其用作需要滚动的事物的根节点。 它所做的只是实现一个contentOffset属性 – 你可以在这里看到它: CATOffsetNode Gist 。
所以在scrollViewDidScroll中:我需要做的是:
-(void)scrollViewDidScroll:(UIScrollView *)scrollView { // I don't need to flip scrollView.contentOffset.Y because my scrollview // Y coordinate is flipped. See below. self->_gameListNode.contentOffset = scrollView.contentOffset; }
然后我添加所需的所有项目作为_gameListNode儿童滚动。
其结果是一个可滚动的游戏列表,它提供了本地滚动视图体验,包括弹性和滑动加速等。
下面是一个可以检查的示例实现: GitHub上的ScrollKit 。
编辑:关于scrollview contentOffset的说明Y方向 :
UIView和SpriteKit Y坐标的方向相反(UIView的原点是左上angular,Y是向下的),我更喜欢一个坐标系。 所以我做了一个自定义的scrollview类,在初始化器中翻转Y方向。 例如:
-(id)initWithFrame:(CGRect)frame { if (self = [super initWithFrame:frame]) { CGAffineTransform verticalFlip = CGAffineTransformMakeScale(1,-1); self.transform = verticalFlip; } return self; }
这是没有必要的(你甚至不需要子类UIScrollView来实现这一点),但没有这个,你将不得不手动翻转contentOffset.Y在scrollview委托。
游戏中心提供排行榜。 也许你可以使用这些? 游戏中心编程指南
- Sprite Kit / Objective C:什么是对象的“触摸指示器”
- 将自定义“数字”图像添加到SKLabelNode中,作为使用Swift的SpriteKit分数
- “这个项目不能共享。 请select其他项目。“WhatsApp iOS共享扩展失败消息
- 当spritekit swift中的节点被触摸时声音不播放
- 用atlas文件和SpriteKit进行批处理绘图的问题
- 如何使SpriteKit跳转到特定的高度?
- 与GameplayKit的障碍
- 如何在spritekit 中按下主页button时暂停并重新启动NSTimer.scheduledTimerWithTimeInterval?
- 斯威夫特:如何使我的angular色在我的游戏中只能在他击中地面时跳跃?