Swift游戏实战-跑酷熊猫 10 视差滚动背景

原文:Swift游戏实战-跑酷熊猫 10 视差滚动背景

原理

 

实现

 

勘误

“实现”的视频中有个错误,如下

背景移动时有个错误,看红色部分,近景归位时,第二张图片的下标是1

if arrBG[0].position.x + arrBG[0].frame.width < speed{
           
arrBG[0].position.x = 0
            arrBG[1].position.x
= arrBG[0].frame.width

  }

 

要点:

什么是视差滚动:

视差滚动(Parallax Scrolling)是指让多层背景以不同的速度移动,形成立体的运动效果,带来非常出色的视觉体验。

 

如何实现:

首先是背景,由两种背景组成,近点的是青色山坡,远点的是树木。我们在move方法中给予近景1/5 的平台移动速度。给远景1/20 的平台移动速度。就形成了视差滚动。

 

具体代码

import SpriteKit
//继承自sknode
class BackGround :SKNode {
    //近处的背景数组
    var arrBG = [SKSpriteNode]()
    //远处树木的背景数组
    var arrFar = [SKSpriteNode]()
    //构造器
    init() {
        //执行父类的构造器
        super.init()
        //远处背景的纹理
        var farTexture = SKTexture(imageNamed: "background_f1")
        //远处背景由3张无缝衔接的图组成
        var farBg0 = SKSpriteNode(texture: farTexture)
        farBg0.anchorPoint = CGPointMake(0, 0)
        farBg0.position.y = 150

        var farBg1 = SKSpriteNode(texture: farTexture)
        farBg1.anchorPoint = CGPointMake(0, 0)
        farBg1.position.x = farBg0.frame.width
        farBg1.position.y = farBg0.position.y

        var farBg2 = SKSpriteNode(texture: farTexture)
        farBg2.anchorPoint = CGPointMake(0, 0)
        farBg2.position.x = farBg0.frame.width * 2
        farBg2.position.y = farBg0.position.y

        self.addChild(farBg0)
        self.addChild(farBg1)
        self.addChild(farBg2)
        arrFar.append(farBg0)
        arrFar.append(farBg1)
        arrFar.append(farBg2)

        //近处背景纹理
        var texture = SKTexture(imageNamed: "background_f0")
        //近处背景由2张无缝衔接的图组成
        var bg0 = SKSpriteNode(texture: texture)
        bg0.anchorPoint = CGPointMake(0, 0)
        var bg1 = SKSpriteNode(texture: texture)
        bg1.anchorPoint = CGPointMake(0, 0)
        bg1.position.x = bg0.frame.width
        bg0.position.y = 70
        bg1.position.y = bg0.position.y
        self.addChild(bg0)
        self.addChild(bg1)
        arrBG.append(bg0)
        arrBG.append(bg1)
    }
    //移动函数
    func move(speed:CGFloat){
        //循环遍历近处背景,做x坐标位移
        for bg in arrBG {
            bg.position.x -= speed
        }
        //判断第一张背景图是否完全移除到场景外,如果移出去了,则整个近处背景图都归位
        if arrBG[0].position.x + arrBG[0].frame.width < speed {
            arrBG[0].position.x = 0
            arrBG[1].position.x = arrBG[0].frame.width
        }
        //循环遍历做远处背景,做x坐标位移
        for far in arrFar {
            far.position.x -= speed/4
        }
        //判断第一张背景图是否完全移除到场景外,如果移出去了,则整个远处背景图都归位
        if arrFar[0].position.x + arrFar[0].frame.width < speed/4 {
            arrFar[0].position.x = 0
            arrFar[1].position.x = arrFar[0].frame.width
            arrFar[2].position.x = arrFar[0].frame.width * 2
        }
    }
}

 

项目文件地址

http://yun.baidu.com/share/link?shareid=3824235955&uk=541995622

 

Swift游戏实战-跑酷熊猫系列

00
游戏预览

01
创建工程导入素材

02
创建熊猫类

03
熊猫跑动动画

04
熊猫的跳和滚的动作

05
踩踏平台是怎么炼成的

06
创建平台类以及平台工厂类

07
平台的移动

08
产生源源不断的移动平台

09
移除场景之外的平台

 

时间: 2024-10-03 08:20:25

Swift游戏实战-跑酷熊猫 10 视差滚动背景的相关文章

Swift游戏实战-跑酷熊猫 14 熊猫打滚

原文:Swift游戏实战-跑酷熊猫 14 熊猫打滚   这节内容我们来实现熊猫打滚.思路是这样的,当熊猫起跳时记录他的Y坐标,落到平台上的时候再记录它的Y坐标.两个坐标之间的差要是大于一定数值就判断它从高处落下要进行打滚缓冲.至此跑酷熊猫已经像一个游戏的样子了 要点: 起跳y坐标: var jumpStart = 0.0 落地y坐标: var jumpEnd = 0.0 在didBeginContact方法中进行判断 panda.jumpEnd = panda.position.y if pan

Swift游戏实战-跑酷熊猫 11 欢迎进入物理世界

原文:Swift游戏实战-跑酷熊猫 11 欢迎进入物理世界   物理模拟是一个奇妙的事情,以此著名的游戏有愤怒的小鸟.我们在这节将会一起来了解如何设置重力,设置物理包围体,碰撞的检测. 要点: 设置物理检测的代理: 让主场景遵循SKPhysicsContactDelegate协议.通过didBeginContact方法来响应物体之间是否碰撞.自然,我们要把物理系统的代理设为主场景. self.physicsWorld.contactDelegate = self 设置重力: self.physi

Swift游戏实战-跑酷熊猫 12 与平台的碰撞

原文:Swift游戏实战-跑酷熊猫 12 与平台的碰撞   这节主要实现熊猫和平台的碰撞,实现熊猫在平台上奔跑   要点 对平台进行物理属性设置 //设置物理体以及中心点 self.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(self.width, self.height), center: CGPointMake(self.width/2, 0)) //设置碰撞标示符 self.physicsBody.categoryBitM

Swift游戏实战-跑酷熊猫 13 二段跳的实现

原文:Swift游戏实战-跑酷熊猫 13 二段跳的实现   这节内容我们来实现熊猫的二段跳.   要点: 二段跳的逻辑: 逻辑一,第一次点击屏幕,status就会变成jump. 逻辑二,第二次点击屏幕,status就会变成jump2. 逻辑三,当status变成jump2的时候不响应屏幕点击 逻辑四,当熊猫落地时将status变为run.   所以只要当status的不等于jump2的时候,点击屏幕都会给熊猫施加一个向上的速度.这时候判断.如果是一段跳就将status设为jump.如果是二段跳就

Swift游戏实战-跑酷熊猫 04 熊猫的跳和滚的动作

原文:Swift游戏实战-跑酷熊猫 04 熊猫的跳和滚的动作   这节内容,我们利用上一节学过的内容,给熊猫添加跳和滚动的动作.同时通过重载touchBegan方法来响应动作.切换跑,跳,滚. 要点:   通过序列帧纹理产生动画: SKAction.animatWithTextures(texture数组,播放的间隔时间) 永远循环动画: SKAction.repeatActionForever() 点击事件 通过重载touchBegan方法来响应点击动作 override func touch

Swift游戏实战-跑酷熊猫 01 创建工程导入素材

原文:Swift游戏实战-跑酷熊猫 01 创建工程导入素材   在这节里,我们将建立一个游戏工程,并导入一些必要的素材,例如序列帧动画文件,声音素材文件.动画文件我们使用atlas形式.在打包发布或者模拟器测试的时候,它会将整个.atlas文件夹下的图片打包成一张png图片. 要点: texture atlas :它包含了一组相关的texture.使用atlas可以提高性能   项目文件地址 http://yun.baidu.com/share/link?shareid=3824235955&u

Swift游戏实战-跑酷熊猫(一) 简介 (含源代码)

原文:Swift游戏实战-跑酷熊猫(一) 简介 (含源代码)   优酷观看地址:http://v.youku.com/v_show/id_XNzM2Nzc2MTIw.html   通过这个小游戏,我们能够接触到物理系统(SKPhysicsBody,physicsWorld),动作(SKAction),声音素材的播放,文本标签(SKLabelNode)   我们实现的功能有 熊猫动作的切换,跑,跳,滚 落点平台的生成,移动 熊猫吃的竹子的生成和移动 熊猫跑了多长时间和吃了多少根竹子   一些细节

Swift游戏实战-跑酷熊猫 03 熊猫跑动动画

原文:Swift游戏实战-跑酷熊猫 03 熊猫跑动动画 这节内容,我们一起来利用SKAction的来为熊猫创建动画,我们将学会通过纹理组产生动画,使用永远循环的SKAction让熊猫不停的跑动. 要点: 枚举的使用:用来记录熊猫的动作状态 enum Status:Int{ case run=1,jump,jump2,roll //当run被赋值为1的时候,后面的jump,jump2,roll会被自动赋值为2,3,4 }   通过序列帧纹理产生动画: SKAction.animatWithText

Swift游戏实战-跑酷熊猫 02 创建熊猫类

原文:Swift游戏实战-跑酷熊猫 02 创建熊猫类 要点: 如何继承SKSpriteNode :子类必须调用SKSpriteNode的一个指定构造器 init(){ super.init(texture:texture,color:UIColor.whiteColor(),size:size) }   设置场景的背景颜色: self.backgroundColor = SKColor(red:113/255,green:197/255,blue:207,alpha:1) 熊猫类实例化以及定位