7

I have more problems within my app. My errors is as the title says:

  1. Swift Compiler Error.

Error1: 'CGFloat' is not Convertible to 'Float'

Code for the 1st and 2nd error:

self.setPositionRelativeBot(pipeBot, x: xx, y: offset)
self.setPositionRelativeTop(pipeTop, x: xx, y: offset + space)

Here is the whole func:

func spawnPipeRow(offs: Float)
    {
        let offset = offs - space / 2

        let pipeBot = mainPipe.copy() as Pipe
        let pipeTop = mainPipe.copy() as Pipe

        pipeBot.texture = SKTexture(imageNamed: "BotPipe")
        pipeTop.texture = SKTexture(imageNamed: "TopPipe")

        pipeBot.texture!.filteringMode = SKTextureFilteringMode.Nearest
        pipeTop.texture!.filteringMode = SKTextureFilteringMode.Nearest

        pipeBot.isBottom = true

        let xx = self.view!.bounds.size.width

        self.setPositionRelativeBot(pipeBot, x: xx, y: offset)
        self.setPositionRelativeTop(pipeTop, x: xx, y: offset + space)

        pipeBot.physicsBody = SKPhysicsBody(rectangleOfSize: pipeBot.size)
        pipeTop.physicsBody = SKPhysicsBody(rectangleOfSize: pipeTop.size)

        pipeBot.physicsBody!.dynamic = false
        pipeTop.physicsBody!.dynamic = false

        pipeBot.physicsBody!.contactTestBitMask = birdCategory
        pipeTop.physicsBody!.contactTestBitMask = birdCategory

        pipeBot.physicsBody!.collisionBitMask = birdCategory
        pipeTop.physicsBody!.collisionBitMask = birdCategory

        pipes.append(pipeBot)
        pipes.append(pipeTop)

        self.addChild(pipeBot)
        self.addChild(pipeTop)
    }

  1. Swift Compiler Error.

Error1: 'Float' is not identical to 'UInt8'

Code for the 1st error:

vel -= 85 - (self.view!.bounds.size.height - bird.position.y)

Error2: 'SKPhysicsBody?' does not have a member named 'velocity'

Code for the 2nd error:

bird.physicsBody.velocity = CGVectorMake(0, vel)

Here is the whole func:

override func touchesBegan(touches: NSSet, withEvent event: UIEvent)
    {
        if (!bird.physicsBody!.dynamic)
        {
            //First touch

            self.spawnPipeRow(0)

            bird.physicsBody!.dynamic = true

            bird.physicsBody!.velocity = CGVectorMake(0, 175)

            scoreLabel.hidden = false

            isMoving = true
        } else if (isMoving)
        {
            var vel: Float = 200

            if (self.view!.bounds.size.height - bird.position.y < 85)
            {
                vel -= 85 - (self.view!.bounds.size.height - bird.position.y)
            }

            bird.physicsBody.velocity = CGVectorMake(0, vel)
        } else
        {
            overlay.removeFromParent()

            for pi in pipes
            {
                pi.removeFromParent()
            }

            pipes.removeAll(keepCapacity: false)

            score = 0

            bird.physicsBody!.dynamic = false
            bird.position = CGPoint(x: 150, y: view!.bounds.size.height / 2 - 10)

            scoreLabel.hidden = true

            isGroundMoving = true
        }
    }

  1. Swift Compiler Error.

Error1: 'CGFloat' is not identical to 'UInt8'

Code for the 1st and 2nd error (Same error both lines):

ground1.position.x -= movingSpeed
ground2.position.x -= movingSpeed

Error2: Cannot invoke '-=' with an argument list of type '(@lvalue CGFloat, $T9)'

Code for the 3rd and 4th error (Same error both lines):

background1.position.x -= movingSpeed / 3
background2.position.x -= movingSpeed / 3

Error3: 'CGFloat' is not identical to 'UInt8'

pipe.position.x -= movingSpeed

Here is the whole func:

override func update(currentTime: CFTimeInterval)
    {
        if (isGroundMoving)
        {
            ground1.position.x -= movingSpeed
            ground2.position.x -= movingSpeed

            if (ground1.position.x <= -self.view!.bounds.size.width / 2)
            {
                ground1.position.x = self.view!.bounds.size.width * 1.5 - 2
            }

            if (ground2.position.x <= -self.view!.bounds.size.width / 2)
            {
                ground2.position.x = self.view!.bounds.size.width * 1.5 - 2
            }

            background1.position.x -= movingSpeed / 3
            background2.position.x -= movingSpeed / 3

            if (background1.position.x <= -self.view!.bounds.size.width / 2)
            {
                background1.position.x = self.view!.bounds.size.width * 1.5 - 2
            }

            if (background2.position.x <= -self.view!.bounds.size.width / 2)
            {
                background2.position.x = self.view!.bounds.size.width * 1.5 - 2
            }

            if (isMoving)
            {
                for (var i = 0; i < pipes.count; i++)
                {
                    let pipe = pipes[i]

                    if (pipe.position.x + (pipe.size.width / 2) < 0)
                    {
                        pipe.removeFromParent()

                        continue
                    }

                    if (pipe.position.x + (pipe.size.width / 2) < self.view!.bounds.size.width / 2 && pipe.isBottom && !pipe.pointAdded)
                    {
                        score++

                        pipe.pointAdded = true
                    }

                    pipe.position.x -= movingSpeed

                    if (i == pipes.count - 1)
                    {
                        if (pipe.position.x < self.view!.bounds.width - pipe.size.width * 2.0)
                        {
                            self.spawnPipeRow(self.randomOffset())
                        }
                    }
                }

                scoreLabel.text = "Score: \(score)"
            }
        }
    }

I hope some of you guys can figure this out for me because I can't :)

Shruti Thombre
  • 989
  • 4
  • 11
  • 27
StigPing
  • 197
  • 13

1 Answers1

5

Error 1: Use CGFloat instead of Float. For example:

var vel: CGFloat = 200

Error 2: physicsBody is an optional (can be nil), so use ?. operator to conditionally unwrap it before referencing its velocity:

bird.physicsBody?.velocity = CGVectorMake(0, vel)

All of your errors seem to be caused by one of these two issues. For example, spawnPipeRow's argument is again offs: Float instead of CGFloat. And I suspect the same is true of the values that you did not declare in the snippets you provided, such as space or movingSpeed.

To understand what CGFloat is, Command-click on it – this will take you to CoreGraphics API where you can read that CGFloat is a "native type ... which is Float on 32-bit architectures and Double on 64-bit architectures."

Also, I would tend to use ? rather than ! when modifying physicsBody as the latter will crash if the physicsBody is nil.

Milos
  • 2,728
  • 22
  • 24
  • I'm not sure why are people down voting your question. My guess is that it would have been much more helpful, if you tried to isolate the errors you are getting and reproduce them using minimal amount of code. This would have helped you realise that there are at least two questions you are asking an that you should probably ask them separately. Moreover, if you did isolate them, you would've easily found out that they have been already asked and answered on this site. – Milos Sep 29 '14 at 09:20
  • People have been down voting a few of my questions today. – StigPing Sep 29 '14 at 09:39
  • Thanks for solving my errors, now I only have 1 error, but none of above ;) – StigPing Sep 29 '14 at 09:50
  • BTW, I just got mass down votes, leading me to 1 reputation from 15. – StigPing Sep 29 '14 at 09:50
  • 2
    You are welcome. As for down voting, someone down voted my answer as well! In general though, this is a fantastic site and people are super helpful. Just make sure you make your questions focused and well researched before you post... – Milos Sep 29 '14 at 09:57