表达太复杂而无法解决。编译错误

时间:2016-02-17 23:33:27

标签: swift sprite-kit swift2 ios9

兄弟

我正在使用SpriteKit创建一个简单的砖型游戏,我有一个编译时错误,其中说:

  

表达太复杂,无法在合理的时间内解决;考虑将表达式分解为不同的子表达式

我正在尝试做的是,尝试使用嵌套for循环在屏幕上生成砖块,这必须产生5行和6列砖块。

这是我的代码:

for var row=0; row<5; row++
    {
        for var column = 0; column < 6; column++
        {
            let brick = SKSpriteNode(imageNamed: "brick")
            brick.position = CGPoint(x: 2+(brick.size.width/2) + ((brick.size.width + 3) * CGFloat(column)), y: -(2+(brick.size.height/2) + ((brick.size.height + 3) * CGFloat(row))))
                self.addChild(brick)

        }
    }

我试过,将每个X轴和Y轴的加法分成2个部分,但是我还有其他问题,砖块的Y位置错误,位于屏幕底部并重叠。任何想法我该怎么办? 导致这个编译时错误的原因是什么?

我正在使用XCode 7.2.1,Swift 2.1.1

3 个答案:

答案 0 :(得分:2)

仅适用于legibilityunderstandabilitydebuggability 分裂:

brick.position = CGPoint(x: 2+(brick.size.width/2) + ((brick.size.width + 3) * CGFloat(column)), y: -(2+(brick.size.height/2) + ((brick.size.height + 3) * CGFloat(row))))

线条很长,甚至不能同时看到所有线条。

成:

let xPos =   2+(brick.size.width/2)  + ((brick.size.width  + 3) * CGFloat(column))
let yPos = -(2+(brick.size.height/2) + ((brick.size.height + 3) * CGFloat(row))   )
brick.position = CGPoint(x: xPos, y:yPos)

这也可以帮助您找到错误的位置,请参阅@Alain T的答案。

答案 1 :(得分:1)

此错误通常是由编译器无法确定表达式某些部分的类型引起的。

如果您使用CGPointMake(...),因为参数的类型是预先确定的,您将不会收到错误

你需要删除x:和y:尽管

答案 2 :(得分:-1)

我建议:

let brickTemp = SKSpriteNode(imageNamed: "brick")
let brickWidth = brickTemp.size.width
let brickHeight = brickTemp.size.height
for row in 0..<5 {
    let y = 2 + (brickHeight / 2) + ((brickHeight + 3) * CGFloat(row))
    for column in 0..<6 {
        let brick = SKSpriteNode(imageNamed: "brick")
        let x = 2 + (brickWidth / 2) + ((brickWidth + 3) * CGFloat(column))
        brick.position = CGPoint(x: x, y: -y)
        self.addChild(brick)
    }
}