Float不能转换为CGFloat,CGFloat不能转换为Float

时间:2014-07-25 08:46:05

标签: iphone xcode swift ios8

我在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双核,在小牛OS X 10.9.4(13E28)上使用。我看到有关建筑选项的一些内容可能会影响浮动类型,但我不知道它们在哪里。

2 个答案:

答案 0 :(得分:4)

这将被解释为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

答案 1 :(得分:1)

确保每个操作数具有相同的类型。文字(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))