Swift 我是否应该使用SKShapeNode的替代项来创建图形?如果是,什么?

Swift 我是否应该使用SKShapeNode的替代项来创建图形?如果是,什么?,swift,skscene,skshapenode,Swift,Skscene,Skshapenode,我有以下代码在场景中绘制图片: override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) { for touch in touches { let location = touch.locationInNode(self) newPoint = location let pathToDraw:CGMutablePathRef = C

我有以下代码在场景中绘制图片:

override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {
    for touch in touches {
        let location = touch.locationInNode(self)
        newPoint = location

        let pathToDraw:CGMutablePathRef = CGPathCreateMutable()
        let myLine:SKShapeNode = SKShapeNode(path:pathToDraw)


        CGPathMoveToPoint(pathToDraw, nil, lastPoint.x, lastPoint.y)
        CGPathAddLineToPoint(pathToDraw, nil, newPoint.x, newPoint.y)
        lastPoint = newPoint

        myLine.lineWidth = 3.0
        myLine.path = pathToDraw
        myLine.strokeColor = SKColor.whiteColor()

        self.addChild(myLine)
    }
}
覆盖功能触摸移动(触摸:设置,带事件:UIEvent?){
接触{
let location=touch.locationInNode(自)
newPoint=位置
让pathToDraw:CGMutablePathRef=CGPathCreateMutable()
设myLine:SKShapeNode=SKShapeNode(路径:pathToDraw)
CGPathMoveToPoint(pathToDraw、nil、lastPoint.x、lastPoint.y)
CGPathAddLineToPoint(pathToDraw、nil、newPoint.x、newPoint.y)
lastPoint=newPoint
myLine.lineWidth=3.0
myLine.path=pathToDraw
myLine.strokeColor=SKColor.whiteColor()
self.addChild(myLine)
}
}
这正是我想要的,我可以用它画画,但我认为它不是很有效。我应该使用另一种方法来获得与画画相同的效果,还是这样可以?如果我应该使用其他方法,替代方法是什么

而是添加一个“SKShapeNode”作为绘图节点,并将其路径作为属性,即

class MyDrawingNode: SKNode {
    ...
}
并更新路径,而不是为路径中的点每行添加单个SKNode子节点。因此,有些东西的效果是:

override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {
    for touch in touches {
        let location = touch.locationInNode(self)
        newPoint = location

        let myLinePath:CGMutablePathRef = myDrawingNode.path

        ...
   }
从这里使用myHouse的内容绘制路径,myHouse是各种结构的数组

你有很多方法可以做到这一点,所以我只是给你一些粗略的想法:)

FPS下降

一种方法是:

  • 在更新功能的
    SKScene
    中,将一些代码放在一起,仅每x ms更新一次场景,而不是每次通过以下方式更新场景:

    var nthframecont=0 设n帧=6 覆盖函数更新(currentTime:CFTimeInterval){

    }

  • 然后在
    updateOnNthFrame
    函数中处理实际的更新代码。在上面的例子中,它是每6帧,而不是每一帧

    虽然每毫秒的绘制时间较少,但人眼开始记录大约25~30fps的平滑运动。。。在电视上,美国的电视模拟标准是NTSC,即每秒30帧

    因此,当您每秒更新移动次数减少时,“更新代码”的实际运行次数为每秒10次(在我的示例中,如果FPS为60 FPS,则为每秒10次)

    希望这能解释得更多一点:)如果没有,请给我一个聊天请求,我会尝试进一步帮助你

    干杯:)

    而是添加一个“SKShapeNode”作为绘图节点,并将其路径作为属性,即

    class MyDrawingNode: SKNode {
        ...
    }
    
    并更新路径,而不是为路径中的点每行添加单个SKNode子节点。因此,有些东西的效果是:

    override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {
        for touch in touches {
            let location = touch.locationInNode(self)
            newPoint = location
    
            let myLinePath:CGMutablePathRef = myDrawingNode.path
    
            ...
       }
    
    从这里使用myHouse的内容绘制路径,myHouse是各种结构的数组

    你有很多方法可以做到这一点,所以我只是给你一些粗略的想法:)

    FPS下降

    一种方法是:

  • 在更新功能的
    SKScene
    中,将一些代码放在一起,仅每x ms更新一次场景,而不是每次通过以下方式更新场景:

    var nthframecont=0 设n帧=6 覆盖函数更新(currentTime:CFTimeInterval){

    }

  • 然后在
    updateOnNthFrame
    函数中处理实际的更新代码。在上面的例子中,它是每6帧,而不是每一帧

    虽然每毫秒的绘制时间较少,但人眼开始记录大约25~30fps的平滑运动。。。在电视上,美国的电视模拟标准是NTSC,即每秒30帧

    因此,当您每秒更新移动次数减少时,“更新代码”的实际运行次数为每秒10次(在我的示例中,如果FPS为60 FPS,则为每秒10次)

    希望这能解释得更多一点:)如果没有,请给我一个聊天请求,我会尝试进一步帮助你


    干杯:)

    这很有效,但这是否更有效?fps仍然下降,它也不像我画的那么平滑。更新了更多的信息,你可能会发现有用的答案。。。就像我说的,如果你需要更多的帮助,给我一个聊天请求,我会看看我是否能提供更多的帮助:)这是有效的,但这是否更有效?fps仍然下降,它也不像我画的那么平滑。更新了更多的信息,你可能会发现有用的答案。。。如我所说,如果您需要更多帮助,请向我发送聊天请求,我将查看是否可以进一步提供帮助:)