【问题标题】:How Can I increase radius of SKShapeNode by 1 pixel every second?如何每秒将 SKShapeNode 的半径增加 1 个像素?
【发布时间】:2021-04-09 08:00:51
【问题描述】:

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

    var eRadius: CGFloat = 20
    var eCircle = SKShapeNode()

    override func didMove(to view: SKView) {
            super.didMove(to: view)
    
            eCircle = SKShapeNode(circleOfRadius: eRadius)
            eCircle.strokeColor = .black
            eCircle.glowWidth = 1.0
            eCircle.fillColor = .white
            eCircle.fillTexture = SKTexture(imageNamed: "e")
            
            addChild(eCircle)

    gameTimer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(addRadius), userInfo: nil, repeats: true)
}
    
        @objc func addRadius(){
        eRadius += 1
        ???? :(
        }

谢谢!

【问题讨论】:

  • 您可以改变 path 属性 - 以及获得圆形 cg 路径的许多方法,一种是来自 UIBezierPath(ovalIn: ...) 的正方形 - 这有帮助吗?
  • 谢谢Shadowrun!但我是 Swift 新手,不知道变异后如何处理路径...

标签: swift sprite-kit skshapenode


【解决方案1】:

这是一个可行的解决方案:

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 序列,既设置路径,然后更改半径。为了清楚起见,我选择先做路径,然后更新下一个转弯的半径。

你也可以用相反的方法,先运行更新函数设置初始路径,然后等待一秒钟,然后更改半径,然后根据该半径更新路径。

在 SpriteKit 中,您应该将 SKActions 用于计时器,而不是调度或调度队列。使用 SKActions,一切都符合相同的游戏时间,然后您可以通过暂停等方式进行控制。

此外,使用 UIBezierPath 制作圆的方法有多种,包括椭圆、圆角矩形和圆弧:https://developer.apple.com/documentation/uikit/uibezierpath

【讨论】:

    猜你喜欢
    • 2023-03-23
    • 1970-01-01
    • 2021-08-13
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多