我在让我的游戏在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()
}
最佳答案
您可以使用:
self.nodeAtPoint(point: CGPoint)
要么
self.nodesAtPoint(point: CGPoint)
使用触摸位置来找到要触摸的节点,然后可以更改该节点的Alpha
关于ios - Swift和Spritekit,性能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28727815/