gpt4 book ai didi

ios - SpriteKit 中的 ScrollView

转载 作者:搜寻专家 更新时间:2023-10-31 19:33:21 26 4
gpt4 key购买 nike

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

我的愿景是在屏幕底部有一个水平可 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com