Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 斯威夫特和斯皮特基特,性能_Ios_Performance_Swift_Sprite - Fatal编程技术网

Ios 斯威夫特和斯皮特基特,性能

Ios 斯威夫特和斯皮特基特,性能,ios,performance,swift,sprite,Ios,Performance,Swift,Sprite,我在使用Swift/SpriteKit时遇到了一些问题,在其他地方找不到答案,所以我希望能在这里得到帮助 我有一个屏幕,屏幕上布满了sksprite节点,大约1800个,当我的手指移动到它们上面时,它们就消失了 我最初是用物理方法实现的,通过在我的手指下拖动一个隐藏的节点,但是我刚刚将它加载到我的手机上,性能并没有达到要求 然后我重新设计了它,使用“containsPoint” 现在的性能更好时,在休息(60帧/秒),但每当我触摸屏幕是挂起,CPU上升 这是因为它必须在每次移动中循环每个瓷砖的位

我在使用Swift/SpriteKit时遇到了一些问题,在其他地方找不到答案,所以我希望能在这里得到帮助

我有一个屏幕,屏幕上布满了sksprite节点,大约1800个,当我的手指移动到它们上面时,它们就消失了

我最初是用物理方法实现的,通过在我的手指下拖动一个隐藏的节点,但是我刚刚将它加载到我的手机上,性能并没有达到要求

然后我重新设计了它,使用“containsPoint”

现在的性能更好时,在休息(60帧/秒),但每当我触摸屏幕是挂起,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()
}
func addTiles(){
设rowsReq=56,colsReq=32
对于0中的i..
self.nodeAtPoint(point: CGPoint)


通过触摸位置来查找正在触摸的节点,然后可以更改节点的alpha

在sprite kit上有最佳实践WWDC2014。观看它,也许你会找到一些答案。下半部分重点介绍性能
self.nodesAtPoint(point: CGPoint)