博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swift游戏实战-跑酷熊猫 10 视差滚动背景
阅读量:6078 次
发布时间:2019-06-20

本文共 2625 字,大约阅读时间需要 8 分钟。

原文:

原理

 

实现

 

勘误

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

背景移动时有个错误,看红色部分,近景归位时,第二张图片的下标是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//继承自sknodeclass 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        }    }}

 

项目文件地址

 

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

 

转载地址:http://wshgx.baihongyu.com/

你可能感兴趣的文章
理解B树索引
查看>>
vi编辑器的命令集合
查看>>
Mysql利用binlog恢复数据
查看>>
解决 Windows启动时要求验证
查看>>
我的友情链接
查看>>
用yum安装mariadb
查看>>
一点IT"边缘化"的人的思考
查看>>
Gallery循环滑动
查看>>
Sql与C#中日期格式转换总结
查看>>
iOS开发流程总结
查看>>
hadoop datanode 启动出错
查看>>
js颜色拾取器
查看>>
IDEA使用(1)intellIJ idea 配置 svn
查看>>
WPF 降低.net framework到4.0
查看>>
数据管理DMS 全量SQL诊断:你的SQL是健康的蓝色,还是危险的红色?
查看>>
搭建一个通用的脚手架
查看>>
开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
查看>>
开源磁盘加密软件VeraCrypt教程
查看>>
本地vs云:大数据厮杀的最终幸存者会是谁?
查看>>
阿里云公共镜像、自定义镜像、共享镜像和镜像市场的区别 ...
查看>>