兄弟
我正在使用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
答案 0 :(得分:2)
仅适用于legibility,understandability和debuggability 分裂:
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)
}
}