Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.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
Swift 如何将SKShapeNode的半径每秒增加1个像素?_Swift_Sprite Kit_Skshapenode - Fatal编程技术网

Swift 如何将SKShapeNode的半径每秒增加1个像素?

Swift 如何将SKShapeNode的半径每秒增加1个像素?,swift,sprite-kit,skshapenode,Swift,Sprite Kit,Skshapenode,我正在尝试编写一个函数,其中我可以每秒增加SKShapeNode半径,但不知道如何:( 谢谢!这里有一个可行的解决方案: import SpriteKit class GameScene: SKScene { private var eRadius: CGFloat = 20 private var eCircle = SKShapeNode() override func didMove(to view: SKView) { eCi

我正在尝试编写一个函数,其中我可以每秒增加SKShapeNode半径,但不知道如何:(


谢谢!

这里有一个可行的解决方案:

import SpriteKit

class GameScene: SKScene {
    
    private var eRadius: CGFloat = 20
    private var eCircle = SKShapeNode()
    
    override func didMove(to view: SKView) {
        eCircle.strokeColor = .black
        eCircle.glowWidth = 1.0
        eCircle.fillColor = .white
        eCircle.fillTexture = SKTexture(imageNamed: "e")
        addChild(eCircle)
        
        run(SKAction.repeatForever(SKAction.sequence([SKAction.run {
            self.updateCirclePath()

            self.eRadius += 1
        }, SKAction.wait(forDuration: 1.0)])))
    }
    
    private func updateCirclePath() {
        eCircle.path = UIBezierPath(ovalIn: CGRect(x: -eRadius * 0.5, y: -eRadius * 0.5, width: eRadius, height: eRadius)).cgPath
    }
}
基本上,您可以使用UIBezierPath创建圆,然后随着半径的变化进行更新。对于更新,您应该使用一个永久重复的SKAction序列,这两个序列都设置路径,然后更改半径。为了清晰起见,我选择先执行路径,然后更新下一个转弯的半径

您也可以使用相反的方法,因此首先运行update函数来设置初始路径,然后等待一秒钟,然后更改半径,然后基于该半径更新路径

在SpriteKit中,您应该使用SKActions作为计时器,而不是调度或分派队列。使用SKActions,所有内容都符合相同的游戏时间,然后您可以通过暂停或其他方式进行控制


此外,有多种方法可以使用UIBezierPath生成圆,包括椭圆、圆角矩形和圆弧:。

您可以修改路径属性-还有许多方法可以获得圆形cg路径,其中一种方法是从UIBezierPath(ovalIn:…)有一个正方形-这有帮助吗?谢谢你暗影奔跑!但我对Swift是新手,不知道如何处理变异后的路径。。。
import SpriteKit

class GameScene: SKScene {
    
    private var eRadius: CGFloat = 20
    private var eCircle = SKShapeNode()
    
    override func didMove(to view: SKView) {
        eCircle.strokeColor = .black
        eCircle.glowWidth = 1.0
        eCircle.fillColor = .white
        eCircle.fillTexture = SKTexture(imageNamed: "e")
        addChild(eCircle)
        
        run(SKAction.repeatForever(SKAction.sequence([SKAction.run {
            self.updateCirclePath()

            self.eRadius += 1
        }, SKAction.wait(forDuration: 1.0)])))
    }
    
    private func updateCirclePath() {
        eCircle.path = UIBezierPath(ovalIn: CGRect(x: -eRadius * 0.5, y: -eRadius * 0.5, width: eRadius, height: eRadius)).cgPath
    }
}