我遇到一些问题让我的游戏在Swift / SpriteKit中工作,而在其他地方找不到答案所以我希望我能在这里得到帮助。
我有一个充满sksprite节点的屏幕,大约1800个,当我的手指移过它们时,它们会消失。
我最初使用物理技术,通过在我的手指周围拖动一个隐藏的节点,然而我只是将它加载到我的手机上并且性能不是最好的。
然后我重新设计它以使用'containsPoint'。
现在静止时性能会更好(60FPS),但每当我触摸屏幕时都会挂起,CPU会上升。
这是因为它必须在每次移动时遍历每个图块的位置,每次移动超过1800次计算,并将其与我当前的触摸进行比较。
请有人建议更优雅的解决方案吗?我已经尝试过使用字典,但它抱怨CGPOINT不可用。
我会在下面粘贴相关代码,非常感谢!
func addTiles() {
let rowsReq=56, colsReq=32
for i in 0..< rowsReq*colsReq {
...
let tileNode:SKSpriteNode = SKSpriteNode()
tilePosArray.append(tileNode.position)
...
}
}
func moveMarker(location: CGPoint){
markerLayer.position=location
for i in 0..<tilePosArray.count {
if (markerLayer.containsPoint(tilePosArray[i])) {
tileTouched(i)
}
}
}
func tileTouched(tileIdInt: Int) {
tileArray[tileIdInt].alpha=0
checkComplete()
}
答案 0 :(得分:2)
您可以使用:
self.nodeAtPoint(point: CGPoint)
或
self.nodesAtPoint(point: CGPoint)
使用触摸位置查找正在触摸的节点,然后可以为节点更改alpha