我在XCode 6 beta 4上有一个问题,这让我发疯。我在IOS 8中开发一款游戏,我遵循了一个教程,但我得到了这个:Float不能转换为CGFloat,然后当我重设为CGFloat时,我得到了另一个。下面是代码:
override func didMoveToView(view: SKView) {
/* Setup your scene here */
//physics
self.physicsWorld.gravity = CGVectorMake(0.0, -5.0)
// Bird
var birdTexture = SKTexture(imageNamed: "kirby")
birdTexture.filteringMode = SKTextureFilteringMode.Nearest
bird.setScale(0.5)
bird.position = CGPoint(x: self.frame.size.width * 0.35, y: self.frame.size.height * 0.6)
bird.physicsBody = SKPhysicsBody(circleOfRadius:bird.size.height/2)
bird.physicsBody.dynamic = true
bird.physicsBody.allowsRotation = false
self.addChild(bird)
//ground
ground.setScale(2.0)
ground.position = CGPointMake(self.size.width/2, ground.size.height/2)
ground.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(self.frame.size.width , ground.size.height))
ground.physicsBody.dynamic = false
self.addChild(ground)
//pipes
//create pipes
//^
//movement of the pipes
let distanceToMove = CGFloat(self.frame.size.width + 2.0 * pipeUp.texture.size().width)
let movePipe = SKAction.moveByX(-distanceToMove, y: CGFloat(0.0), duration: NSTimeInterval(0.01) * distanceToMove) <----- this line is the problem
}
发生了什么,我移动了行:
CGFloat(self.frame.size.width + 2.0 * pipeUp.texture.size().width)
我得到第二个错误,然后重铸:
Float(CGFloat(self.frame.size.width + 2.0 * pipeUp.texture.size().width))
或
Float(self.frame.size.width + 2.0 * pipeUp.texture.size().width)
给了我第一个,所以swift想要什么,这太疯狂了。赶上22吗?任何帮助吗?
编辑:我用的是2009年末的13英寸mac电脑,英特尔酷睿2双核,运行的是mavericks OS X 10.9.4 (13E28)。我看到一些关于建筑选项可能会影响浮动类型,但我不知道他们在哪里。
这将被解释为CGFloat
,而不是您转换然后相乘的NSTimeInterval
:
let movePipe = SKAction.moveByX(-distanceToMove, y: 0.0, duration: NSTimeInterval(0.01) * distanceToMove)
尝试乘法然后转换为NSTimeInterval
:
let movePipe = SKAction.moveByX(-distanceToMove, y: 0.0, duration: NSTimeInterval(0.01 * distanceToMove))
同样,正如已经建议的,你不需要投射你的距离。下面的代码可以正常工作:
let distanceToMove = self.frame.size.width + 2.0 * pipeUp.texture.size().width
确保每个操作数具有相同的类型。字面量(2.0
)的类型总是推断出来的。对于你的情况,我认为没有问题,因为
let distanceToMove: CGFloat = self.frame.size.width + 2.0 * pipeUp.texture.size().width
具有CGFloat
类型的所有操作数,因此根本不需要强制类型转换。
SKAction.moveByX(-distanceToMove, y: 0.0, duration: 0.01 * NSTimeInterval(distanceToMove))