SpriteKit中的ScrollView

时间:2016-11-08 23:48:56

标签: ios swift xcode uiscrollview sprite-kit

我发现了一些与此相似的问题和答案,但它们都不适合我。

我的愿景是在屏幕底部有一个水平滚动视图,我可以在其中滚动看起来像手中的卡片。理想情况下,我最终可以将中间的卡片放大一点并给它一个突出显示的外观,以向用户显示选择了哪个卡片。如果我能弄清楚如何保持滚动视图的大小调整以增加视图中精灵(卡片)的数量,那就更好了。

无论如何,我仍然是XCode和Swift的新手,所以我很难接受我发现并改变它。但是,我希望快速学习。

到目前为止我所理解的是UIScrollView可以覆盖场景,并且可以使用可移动的spritenode滚动视图。然后视图将以某种方式将坐标转换为SpriteKit场景,以移动看起来像在视图中的精灵。我认为这是如何运作的。任何帮助都会很棒。我很困惑。 < 3

1 个答案:

答案 0 :(得分:2)

您必须使用全局/成员变量在touchesMoved()中创建自己的逻辑。

不幸的是,很多gamedev和SK都是数学和逻辑..你必须提出自己的问题和解决方案..没有手册,因为编程和Swift的可能性是无穷无尽的:)

移动卡片:

基本上,您将每个touch位置与最后一个位置进行比较,这将成为" delta值"您可以用来执行操作。

例如,如果我触摸屏幕的中心,我的触摸位置是0,0(或无论你的锚点设置为什么)。如果我向右移动我的手指,那么我现在说25,0 ...这会创建一个" delta值" + 25x。

使用该delta值,您可以对所有卡执行各种操作,例如moveBy ...所以,如果我的deltaX为+25,那么我需要将所有卡节点移到右侧(根据您的喜好确定一定数量)。如果我的deltaX为-25,我将卡片向左移动一定数量。

你所做的实际移动取决于你 - 你可以在update()touchesMoved()中放置一个函数,该函数会以某个deltaX值的特定速率不断移动卡片。

好的,这是一个满口的......也许这会有所帮助:

for touch in touches {
   myGlobalDeltaX = myDeltaXFunc(currentTouch: touch)
   myMoveFunc(cards: allTheCards, byDeltaX: myGlobalDeltaX)

- 您可以搜索如何制作Delta功能,但它与Algebra的功能完全相同 - myMoveFunc可以简单到迭代所有卡片节点,然后同时在它们上运行.moveBy

中检:

要检测哪个卡位于中心位置,您可以拨打touchesEnded()update()来检查屏幕中心的节点名称/标识...这样的话

// `self` here refers to your GameScene class' instance, which is just an `SKScene` object
let centerX = self.frame.midX
let centerY = self.frame.midY
let center = CGPoint(x: centerX, y: centerY)

let centerNode = self.nodes(at: center)

您显然希望将centerX和centerY更改为您想要中间卡的位置:)现在,这只是在屏幕的死角。

一旦你有centerNode,你就需要做你创造的任何功能来选择"选择"它

let selectedCard = centerNode
mySelectionFunc(middleCard: selectedCard)

这可能看起来很多,但我已经提出了让它更容易理解的步骤。如果需要,你可以在一行中完成所有这些。

mySelectionFunc(middleCard: self.nodes(at: CGPoint(x: self.frame.x, y: self.frame.y)))

希望这会有所帮助!