【问题标题】:Change CGSize with a variable用变量改变 CGSize
【发布时间】:2015-06-19 00:30:58
【问题描述】:

我想用一个变量来改变我的 SKNode 的大小,这样它就可以用一个 for 循环来变小。它给了我一个错误:

找不到接受类型为“(width:... , height:...)”的参数列表的“CGSize”类型的初始化程序

for (var i = 0.9; i > 0.0; i -= 0.1){
           for (var k = 1.25; i > 0.0; i -= 0.1){

                self.sun.size = CGSize(width: self.size.width * i, height: self.size.height * k) // error here
        } 
}   

【问题讨论】:

  • 这是一个无限循环,无论如何你都应该使用for 这样的循环......而且它甚至没有意义,因为无论如何你都在隐藏你的循环变量......
  • 问题可能与您尝试将CGFloatDouble 相乘有关。此外,由于您使用的是 Sprite Kit,您可以使用 SKActions 来更改节点的大小。
  • 编辑 for 循环以使其有意义。我会尝试 SKAction 看看它是否有效。

标签: swift core-graphics skaction


【解决方案1】:

我运行了这个 SKAction 代码,而不是 ABakerSmith 建议的 for 循环,它看起来更干净。

var shrinkSun = SKAction.scaleBy(0.5, duration: 2)
self.sun.runAction(shrinkSun)

【讨论】:

    【解决方案2】:

    您的代码不起作用,因为self.size.widthCGFloatiDouble(与self.size.heightk 相同)。 CGFloat 不能乘以 Double。试试下面的代码。

    for (var i = CGFloat(0.9); i > 0.0; i -= 0.1){
            for (var k = CGFloat(1.25); i > 0.0; i -= 0.1){
    
                self.sun.size = CGSize(width: self.size.width * i, height: self.size.height * k) // error here
            }
        }
    

    我已经使用 Xcode 7 和 Swift 2.0 对其进行了测试。万一出现问题,下面的代码肯定会起作用

    for (var i = 0.9; i > 0.0; i -= 0.1){
           for (var k = 1.25; i > 0.0; i -= 0.1){
    
                self.sun.size = CGSize(width: self.size.width * CGFloat(i), height: self.size.height * CGFloat(k)) // error here
        } 
    }   
    

    【讨论】:

    • 完美运行,非常感谢。我不得不调整大小几次,因为它消失了,但我看起来很棒。
    猜你喜欢
    • 1970-01-01
    • 2023-02-04
    • 2018-01-18
    • 2014-01-01
    • 2019-11-08
    • 1970-01-01
    • 2021-08-30
    • 2015-03-16
    • 1970-01-01
    相关资源
    最近更新 更多