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

Posted

技术标签:

【中文标题】以编程方式使用 Swift 在 Spritekit 中滚动视图(无情节提要)【英文标题】:Scrollview in Spritekit using Swift Programmatically (no storyboard) 【发布时间】:2016-02-24 15:37:20 【问题描述】:

所以我希望学习使用SwiftSpritekit 中制作图标的滚动视图(有点像菜单)。我找不到任何不收费的好资源或教程。

我的基本应用设置了一个 ViewController 和我的场景。 我希望有一个比屏幕高度长 2 或 3 倍的滚动视图,我可以在其中上下滚动并查看不同的图标。

我希望这是一个很好的实现,所以我可以使用 x/y 坐标以编程方式设置所有图标。

我的 viewdidLoad:

override func didMoveToView(view: SKView) 
    /* Setup your scene here */

    addChild(worldNode)

    //create Scrollview

    //for loop to adding icons from top to bottom of scrollview
    //name sprites

    //use touch location so allow sprites to be clickable
    //will just adjust alpha of icon for testing purposes later

这就是我目前真正想要实现的目标,如果你能想象的话,是这样的:

我在这里看到的一些问题似乎比我想象的要详细得多,而且在这个阶段对我来说太复杂了,或者它们没有迅速......

如何包含滚动视图? 提前谢谢你:)

【问题讨论】:

【参考方案1】:

如果您的整个 UI 是使用 SpriteKit 构建的场景,您可能需要考虑将其构建为带有相机的滚动场景。 Here's an example in a gameplay context

基本上可以这样工作:

var sceneCam: SKCameraNode! //declare your camera variable in your scene class

然后,在您的didMoveToView 函数中:

sceneCam = SKCameraNode() //initialize your camera
//scaleAsPoint lets you zoom the camera in and out
sceneCam.scaleAsPoint = CGPoint(x: 0.25, y: 0.25) 

camera = sceneCam  //set the scene's camera
addChild(sceneCam) //add camera to scene

//position the camera on the scene.
sceneCam.position = CGPoint(x: frame.center.x, y: frame.center.y)

现在,在您的touchesMoved 手势处理程序中,当您检测到平移时,您可以调整相机位置以匹配平移手势平移。

override func touchesMoved(touches: NSSet, withEvent event: UIEvent) 
  let touch = touches.anyObject() as UITouch
  let positionInScene = touch.locationInNode(self)
  let previousPosition = touch.previousLocationInNode(self)
  let translation = CGPoint(x: positionInScene.x - previousPosition.x, y: positionInScene.y - previousPosition.y)

  sceneCam.position = CGPoint(x: sceneCam.position.x - translation.x, y: sceneCam.position.y - translation.y)

设置的另一个关键部分就是让场景的大小适合您的菜单。这与滚动视图上的内容大小类似。如果您愿意的话,您可能还需要做一些工作来实现分页或类似的UIScrollView 功能。但如果您只需要一个简单的滚动视图,您可以使用相机来完成。

如果你只想在这个视图上使用 UIKit 元素,它可能只是它自己的 VC,没有场景。您甚至可以创建此菜单视图控制器并将其放置在游戏场景中的容器中 - 这样您就可以在菜单 vc 中仅使用 UIKit 组件,但您仍然可以在 SpriteKit 设置中使用它。

【讨论】:

以上是关于以编程方式使用 Swift 在 Spritekit 中滚动视图(无情节提要)的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式截屏(Swift、SpriteKit)

如何在 spritekit 中使用页面控件? (以编程方式)

Swift/SpriteKit - ApplyImpluse 的速度是不是以增量方式工作(每次都添加到先前的值)?

是否可以在Spritekit项目中以编程方式更改纹理色调?

SpriteKit:以编程方式修改 SKScene 框架

如何使用 Swift 5 在 SpriteKit 中以某个角度应用Impulse?