我在让我的游戏在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/

10-12 13:01
查看更多