我发现了一些与此相似的问题和答案,但它们都不适合我。
我的愿景是在屏幕底部有一个水平滚动视图,我可以在其中滚动看起来像手中的卡片。理想情况下,我最终可以将中间的卡片放大一点并给它一个突出显示的外观,以向用户显示选择了哪个卡片。如果我能弄清楚如何保持滚动视图的大小调整以增加视图中精灵(卡片)的数量,那就更好了。
无论如何,我仍然是XCode和Swift的新手,所以我很难接受我发现并改变它。但是,我希望快速学习。
到目前为止我所理解的是UIScrollView可以覆盖场景,并且可以使用可移动的spritenode滚动视图。然后视图将以某种方式将坐标转换为SpriteKit场景,以移动看起来像在视图中的精灵。我认为这是如何运作的。任何帮助都会很棒。我很困惑。 < 3
答案 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)))
希望这会有所帮助!