表达式太复杂而无法解决。编译错误
Expression was too complex to be solved. Compile Error
兄弟
我正在使用 SpriteKit 制作一个简单的积木风格的游戏,我遇到了一个编译时错误:
Expression was too complex to be solved in reasonable time; consider breaking up the expression into distinct sub-expressions
我想做的是,尝试使用嵌套的 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
此错误通常是由于编译器无法确定表达式某些部分的类型造成的。
如果你改用 CGPointMake(...),因为参数的类型是预先确定的,你不会得到错误
您需要删除 x: 和 y: 不过
只为legibility, understandability and 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 的回答..
我建议:
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)
}
}
兄弟
我正在使用 SpriteKit 制作一个简单的积木风格的游戏,我遇到了一个编译时错误:
Expression was too complex to be solved in reasonable time; consider breaking up the expression into distinct sub-expressions
我想做的是,尝试使用嵌套的 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
此错误通常是由于编译器无法确定表达式某些部分的类型造成的。
如果你改用 CGPointMake(...),因为参数的类型是预先确定的,你不会得到错误
您需要删除 x: 和 y: 不过
只为legibility, understandability and 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 的回答..
我建议:
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)
}
}