Swift和spritekit,性能

时间:2015-02-25 19:24:02

标签: ios performance swift sprite

我遇到一些问题让我的游戏在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()
}

1 个答案:

答案 0 :(得分:2)

您可以使用:

self.nodeAtPoint(point: CGPoint)

self.nodesAtPoint(point: CGPoint)

使用触摸位置查找正在触摸的节点,然后可以为节点更改alpha