Swift 如何将SKShapeNode的半径每秒增加1个像素?
我正在尝试编写一个函数,其中我可以每秒增加SKShapeNode半径,但不知道如何:(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
谢谢!这里有一个可行的解决方案:
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
}
}