你必须制定自己的逻辑touchesMoved()
使用全局/成员变量。
不幸的是,很多 gamedev 和 SK 都是数学和逻辑。你必须想出自己的问题和解决方案。没有手册,因为编程和 Swift 的可能性是无穷无尽的:)
移动卡片:
基本上,你比较每个touch
位置到最后一个,这将成为一个“增量值”,您可以使用它来执行操作。
例如,如果我触摸屏幕中心,我的触摸位置是 0,0(或者您设置的锚点)。如果我向右移动手指,那么我现在位于 25, 0...这会创建 +25x 的“增量值”。
使用该增量值,您可以执行各种操作,例如moveBy
对于所有卡...所以如果我的 deltaX 为+25,那么我需要将所有卡节点向右移动(移动一定量,您将根据您的喜好确定)。如果我的 deltaX 为 -25,我会将卡片向左移动一定的量。
实际移动的位置取决于您——您可以在其中添加一个函数update()
or touchesMoved()
以 deltaX 值的特定速率不断地将卡片向特定方向移动。
好吧,那是一口......也许这会有所帮助:
for touch in touches {
myGlobalDeltaX = myDeltaXFunc(currentTouch: touch)
myMoveFunc(cards: allTheCards, byDeltaX: myGlobalDeltaX)
- 你可以搜索如何创建 Delta 函数,但这实际上与代数中的函数是一样的。
- myMoveFunc
可以像迭代所有卡节点然后运行一样简单.moveBy
同时在他们身上。
中检测:
要检测哪张卡位于中心,您可以输入touchesEnded()
or 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)))
希望这对一些人有帮助!