ScriteKit中的ScrollView
我发现了一些类似于这个的其他问题和答案,但没有一个对我来说非常适合。
我的愿景是在屏幕底部有一个水平的可滚动视图,在这里我可以滚动看起来像手中的牌。 理想情况下,我最终可以将卡放在中间放大一些,并给它一个突出显示的外观,以向用户显示select了哪张卡。 更好的办法是,如果我能弄清楚如何保持滚动视图的大小来减less视图中的精灵数量。
无论如何,我对XCode和Swift还是很新的,所以我很难把我find的东西和改变。 但是,我希望快速学习。
我到目前为止所了解的是,一个UIScrollView可以覆盖现场,并与一个可移动的spritenode我可以滚动视图。 该视图然后将坐标以某种方式转换成SpriteKit场景来移动看起来像在视图中的精灵。 我认为这是如何工作的。 任何帮助将是伟大的。 我很困难。 <3
您必须使用全局/成员variables在touchesMoved()
创build自己的逻辑。
不幸的是,很多gamedev和SK是math和逻辑..你必须想出你自己的问题和解决scheme..没有手册,因为在编程和Swift的可能性是无止境的:)
搬牌:
基本上,您将每个touch
位置与最后一个touch
位置进行比较,这成为您可以用来执行操作的“增量值”。
例如,如果我触摸屏幕的中心,我的触摸位置是0,0(或任何您的锚点设置)。 如果我将手指向右移动,那么我现在就说25,0 …这会产生+ 25x的“增量值”。
用这个delta值,你可以执行各种动作,比如所有卡片的moveBy
…所以如果我有一个+25的deltaX,那么我需要把所有的卡片节点向右移动(一定量的你将根据您的喜好决定)。 如果我有一个-X的deltaX,我将卡向左移动一定的数量。
在哪里做实际的移动是由你决定的 – 你可以在update()
或touchesMoved()
中放入一个函数,它不断地以某个特定的deltaX值的速率移动卡片。
好吧,这是一口…也许这将有助于:
for touch in touches { myGlobalDeltaX = myDeltaXFunc(currentTouch: touch) myMoveFunc(cards: allTheCards, byDeltaX: myGlobalDeltaX)
– 您可以search如何使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
,你只需要做任何你创build的function来“select”它。
let selectedCard = centerNode mySelectionFunc(middleCard: selectedCard)
这可能看起来像很多,但我画出了步骤,使理解这一点更容易..你可以做所有这一切在一行,如果需要的话。
mySelectionFunc(middleCard: self.nodes(at: CGPoint(x: self.frame.x, y: self.frame.y)))
希望这有助于一些!
- iOS应用开发过程的9大准则
- IOS:调整UIButton的高度取决于标题文本使用Autolayout?
- animateWithDuration和touchesBegan不成对使用
- 如何检查一个单词是否在cocoa-touch的英文字典中定义?
- UICollectionView与一个粘性头
- 与两个UINavigationControllers共享相同的UIViewController作为rootViewController
- ParseCrashReporting – Apple Mach-O链接器启用后出现错误
- uicollectionview在reloaddata之后立即select一个项目?
- 如何在iOS 10中安装自签名证书