首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SKTileMapNode:检测触碰瓷砖?

SKTileMapNode:检测触碰瓷砖?
EN

Stack Overflow用户
提问于 2016-10-01 23:32:12
回答 1查看 1.8K关注 0票数 3

想象一下一个游戏世界,它只不过是一个屏幕上有10x10块的SKTileMapNode。

用户触摸一块瓷砖。

SKTileMapNode提供了一种知道哪个瓷砖被碰过的方法吗?或者需要进行坐标搜索来确定哪个瓷砖在触点的位置?

还是有其他方法可以做到这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-02 01:10:20

使用UITapGestureRecognizer,您可以使用tileDefinition函数从SKTileMapNode检索已触摸的瓷砖。

代码语言:javascript
复制
func handleTapFrom(recognizer: UITapGestureRecognizer) {
    if recognizer.state != .ended {
        return
    }

    let recognizorLocation = recognizer.location(in: recognizer.view!)
    let location = self.convertPoint(fromView: recognizorLocation)

    guard let map = childNode(withName: "background") as? SKTileMapNode else {
        fatalError("Background node not loaded")
    }

    let column = map.tileColumnIndex(fromPosition: location)
    let row = map.tileRowIndex(fromPosition: location)
    let tile = map.tileDefinition(atColumn: column, row: row)
}

然后,如果您在userData中添加了TilemapEditor,就可以检索它。要包含在userData中的值可能是移动瓷砖等的成本。

代码语言:javascript
复制
let data = tile.userData?.value(forKey: "myKey")

使用识别器的优点是,可以在不相互干扰的单独功能中干净地处理Tap、Pan。在SKScene中初始化手势识别器。

代码语言:javascript
复制
override func didMove(to view: SKView) {
    let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.handleTapFrom(recognizer:)))
    tapGestureRecognizer.numberOfTapsRequired = 1
    view.addGestureRecognizer(tapGestureRecognizer)
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39812458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档