Seed12
Seed12

Reputation: 83

Right to Left Scrolling Background Swift / Sprite Kit

I have a scrolling background, but the background image appears to be "zoomed in" compared to the original image. The background scrolls just fine, but I'm not sure why the image is "zoomed in". Any help would be greatly appreciated.

class GameScene: SKScene, SKPhysicsContactDelegate {


var blueBall:SKSpriteNode!
var backgroundImage:SKSpriteNode!
var backgroundImage2:SKSpriteNode!


override func didMoveToView(view: SKView) {



    self.view!.backgroundColor = UIColor(patternImage: UIImage(imageLiteral: "backgroundImage.png"))


    self.physicsWorld.gravity = CGVectorMake(0.0, -5.0)
    self.physicsWorld.contactDelegate = self

    blueBall = SKSpriteNode( imageNamed: "ball1111.png")
    blueBall.position = CGPoint(x: CGRectGetMidX(self.frame), y: CGRectGetMidY(self.frame))
    blueBall.physicsBody = SKPhysicsBody(circleOfRadius: blueBall.size.width / 0.85)

    blueBall.physicsBody!.dynamic = true
    blueBall.physicsBody!.allowsRotation = true
   self.addChild(blueBall)
    blueBall.zPosition = 2



    backgroundImage = SKSpriteNode(imageNamed: "backgroundImage.png")
    self.addChild(backgroundImage)
    backgroundImage.zPosition = 0
    backgroundImage.anchorPoint = CGPoint(x: 0.5, y: 0.5)
    backgroundImage.size.height = self.size.height
    backgroundImage.size.width = self.size.width
    backgroundImage.position = CGPoint(x: CGRectGetMidX(self.frame), y: CGRectGetMidY(self.frame))


    let backgroundTexture = SKTexture(imageNamed: "backgroundImage.png")


    let shiftBackground = SKAction.moveByX(-backgroundTexture.size().width, y: 0, duration: 9)
    let replaceBackground = SKAction.moveByX(backgroundTexture.size().width, y:0, duration: 0)
    let movingAndReplacingBackground = SKAction.repeatActionForever(SKAction.sequence([shiftBackground,replaceBackground]))

    for var i:CGFloat = 0; i<3; i++ {

        let background = SKSpriteNode(texture: backgroundTexture)
        background.position = CGPoint(x: backgroundTexture.size().width/2 + (backgroundTexture.size().width * i), y: CGRectGetMidY(self.frame))
        background.size.height = self.frame.height
        background.runAction(movingAndReplacingBackground)


        self.addChild(background)




 }





}

Upvotes: 0

Views: 309

Answers (1)

Knight0fDragon
Knight0fDragon

Reputation: 16827

You have an issue with the image not being loaded correctly, so your numbers are off. Basically by loading SKSpriteNode(imageNamed: "backgroundImage.png") with the png extension, you are loading the actual file, not conforming to any retina rules. The width and height then would not be adjusted to handle this case. If you use an atlas inside the xcassets folder, it will allow you to specify the graphics for all display sizes, and will pick the correct one that is supported by the device.

Upvotes: 1

Related Questions