我正在用 swift 创建一个游戏,该游戏涉及用字母组成单词。这些字母是单独的 SKSpriteNode,位于一个 SKSpriteNode 的“架子”上。要从“架子”中删除字母,我正在尝试引入向上滑动。不幸的是,我在滑动被字母拾取时遇到了问题。架子似乎正在吸收它,有时甚至是 SKScene。我已禁用货架节点上的用户交互。
这是我的设置:
swipeRecognizer = UISwipeGestureRecognizer(target: self, action: Selector("move:"))
swipeRecognizer.direction = UISwipeGestureRecognizerDirection.Up
self.view.addGestureRecognizer(swipeRecognizer)
我将 swipeRecognizer 添加到 View 中,然后在 move 方法中,我有以下内容:
func move(swipe:UISwipeGestureRecognizer){
if(swipe.state == UIGestureRecognizerState.Ended && swipe.numberOfTouches() == 1){
var touchLocation = swipe.locationInView(swipe.view)
touchLocation = self.convertPointFromView(touchLocation)
var sprite = self.nodeAtPoint(touchLocation)
if sprite is Letter{
let letter = sprite as Letter
if(gameManager.letterOnShelf(letter)){
gameManager.letterFlicked(letter)
}
}
}
}
只是有时它会将 Sprite 识别为字母,80% 的时间 Sprite 是架子,我无法弄清楚正确的工作方式是什么......
非常感谢任何帮助。
干杯!
最佳答案
我会推荐:
- 使用
UILongPressGestureRecognizer
并将minimumPressDuration
设置为 0。 - 当手势处于
UIGestureRecognizerStateBegan
状态时,查看您触摸的 sprite 是否为Letter
并保存对该图 block 的引用。 - 在
UIGestureRecognizerStateEnded
状态下,您应该能够看到您的手势结束的位置(或者可能是轨迹等),然后移动您之前存储的引用的图 block 。
关于ios - 使用 Swift 的带有 SpriteKit 的 UISwipeGestureRecognizer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25317259/