ios - SpriteKit 中的 ScrollView

标签 ios swift xcode uiscrollview sprite-kit

我发现了其他一些与此类似的问题和答案,但没有一个非常适合我。

我的愿景是在屏幕底部有一个水平可 ScrollView ,我可以在其中滚动浏览看起来像手中卡片的内容。理想情况下,我最终可以将中间的卡片放大一点,并突出显示它以向用户显示选择了哪张卡片。如果我能弄清楚如何调整 ScrollView 的大小以适应 View 中 Sprite (卡片)的数量,那就更好了。

无论如何,我对 XCode 和 Swift 还是很陌生,所以我很难接受我发现的东西并改变它。但是,我希望学得快。

到目前为止,我所了解的是 UIScrollView 可以覆盖场景,并且使用可移动的 spritenode 我可以滚动浏览 View 。然后 View 会以某种方式将坐标转换为 SpriteKit 场景,以移动看起来就像在 View 中的 Sprite 。我认为这就是它的工作原理。任何帮助都会很棒。我很困。 <3

最佳答案

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

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


移动卡片:

基本上,您将每个触摸 位置与最后一个位置进行比较,这将成为您可以用来执行操作的“增量值”。

例如,如果我触摸屏幕中央,我的触摸位置是 0,0(或者你的定位点设置的任何位置)。如果我向右移动手指,那么我现在位于 25、0 处……这将创建一个 +25 倍的“增量值”。

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

实际移动的位置由您决定——您可以在 update()touchesMoved() 中放置一个函数,不断将卡片朝某个方向移动以该 deltaX 值的特定速率..

好吧,那是一口...也许这会有所帮助:

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

- 您可以搜索如何制作 Delta 函数,但它实际上与代数相同。
- 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)))

希望这对一些人有帮助!

关于ios - SpriteKit 中的 ScrollView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40498345/

相关文章:

iOS:CoreGraphics - 使用 CGContextClip 和 lineCap = .Round 剪切弧

ios - 如何访问 JSON 数据并将其显示在 XCode Logcat 中,如果响应为空,我想显示警报

c++ - Xcode 中的 C\C++ 构建链接器错误

ios - xcode 9 simulator 错误 unable to boot the simulator launchd failed to respond mac os sierra

ios - Swift:如何将图像添加到另一个图像?

ios - 用 20 像素向左和向右动画按钮

ios - 在 Swift 中使用导航栏标题作为下拉菜单

ios - HTTP Streaming Server 在 iPhone 上工作,在 iPad 和 Safari 上失败

swift - 在 Swift 2.0 中将 NSCalendarUnit 与 OR(管道)结合使用时出错

iphone - 离开初始 View Controller 时停止播放音乐(使用 AVAudioPlayer)