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(, )
farBg0.position.y = var farBg1 = SKSpriteNode(texture: farTexture)
farBg1.anchorPoint = CGPointMake(, )
farBg1.position.x = farBg0.frame.width
farBg1.position.y = farBg0.position.y var farBg2 = SKSpriteNode(texture: farTexture)
farBg2.anchorPoint = CGPointMake(, )
farBg2.position.x = farBg0.frame.width *
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(, )
var bg1 = SKSpriteNode(texture: texture)
bg1.anchorPoint = CGPointMake(, )
bg1.position.x = bg0.frame.width
bg0.position.y =
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[].position.x + arrBG[].frame.width < speed {
arrBG[].position.x =
arrBG[].position.x = arrBG[].frame.width
}
//循环遍历做远处背景,做x坐标位移
for far in arrFar {
far.position.x -= speed/
}
//判断第一张背景图是否完全移除到场景外,如果移出去了,则整个远处背景图都归位
if arrFar[].position.x + arrFar[].frame.width < speed/ {
arrFar[].position.x =
arrFar[].position.x = arrFar[].frame.width
arrFar[].position.x = arrFar[].frame.width *
}
}
}
项目文件地址
http://yun.baidu.com/share/link?shareid=3824235955&uk=541995622
Swift游戏实战-跑酷熊猫系列
00
游戏预览
01
创建工程导入素材
02
创建熊猫类
03
熊猫跑动动画
04
熊猫的跳和滚的动作
05
踩踏平台是怎么炼成的
06
创建平台类以及平台工厂类
07
平台的移动
08
产生源源不断的移动平台
09
移除场景之外的平台
Swift游戏实战-跑酷熊猫 10 视差滚动背景的更多相关文章
- Swift游戏实战-跑酷熊猫 14 熊猫打滚
这节内容我们来实现熊猫打滚.思路是这样的,当熊猫起跳时记录他的Y坐标,落到平台上的时候再记录它的Y坐标.两个坐标之间的差要是大于一定数值就判断它从高处落下要进行打滚缓冲.至此跑酷熊猫已经像一个游戏的样 ...
- Swift游戏实战-跑酷熊猫 13 二段跳的实现
这节内容我们来实现熊猫的二段跳. 要点: 二段跳的逻辑: 逻辑一,第一次点击屏幕,status就会变成jump. 逻辑二,第二次点击屏幕,status就会变成jump2. 逻辑三,当status变成j ...
- Swift游戏实战-跑酷熊猫 12 与平台的碰撞
这节主要实现熊猫和平台的碰撞,实现熊猫在平台上奔跑 要点 对平台进行物理属性设置 //设置物理体以及中心点 self.physicsBody = SKPhysicsBody(rectangleOfSi ...
- Swift游戏实战-跑酷熊猫 11 欢迎进入物理世界
物理模拟是一个奇妙的事情,以此著名的游戏有愤怒的小鸟.我们在这节将会一起来了解如何设置重力,设置物理包围体,碰撞的检测. 要点: 设置物理检测的代理: 让主场景遵循SKPhysicsContactDe ...
- Swift游戏实战-跑酷熊猫 04 熊猫的跳和滚的动作
这节内容,我们利用上一节学过的内容,给熊猫添加跳和滚动的动作.同时通过重载touchBegan方法来响应动作.切换跑,跳,滚. 要点: 通过序列帧纹理产生动画: SKAction.animatWith ...
- Swift游戏实战-跑酷熊猫 09 移除场景之外的平台
上一节,我们写出了一个疯狂产生平台的东西.所谓上帝欲使其灭亡,必先使其疯狂.所以太疯狂都不是什么好事,所以我们要采取一些措施,例如移除场景之外的平台.btw如果哪天你觉得自己的老板行为乖张,难以理喻. ...
- Swift游戏实战-跑酷熊猫 08 产生源源不断的移动平台
原理 代码实现 这节内容我们一起学习下平台的生产算法. 要点: 何时生成新的平台: 当上一个平台的右边完全进入场景的时候,就可以生成新的平台类. 如何知道上一个平台完全进入场景: 主场景中有个变量la ...
- Swift游戏实战-跑酷熊猫 07 平台的移动
这节内容我们来实现平台是怎么产生移动动画的. 要点 1 利用数组存放平台 var platforms=[Platform]() 2 有新的平台产生存放进数组 platforms.append(plat ...
- Swift游戏实战-跑酷熊猫 06 创建平台类以及平台工厂类
这节内容我们一起学习下随机长度的踩踏平台的原理是怎么样的. 要点: 平台类 我们的平台类继承于SKNode,这样就能被添加进其它节点进而显示在场景中. 它有一个方法来创建平台,这个方法接收一个包含SK ...
随机推荐
- ip sevices
http://www.ip138.com/ip2city.asp http://www.bliao.com/ip.phtml http://www.whereismyip.com/ http://ww ...
- http安全篇
一.app与服务端交互确保来源的安全 作为一个移动互联网App,天生是需要和服务器通信的.那么,服务器如何识别客户端的身份?我们如何保证数据传输过程中的安全性?要靠两个东西:使用AppKey做身份识别 ...
- XML xsd
targetNamespace:表示本XSD中定义的元素和类型的名字空间都是http://exammpleOrder. xmlns:xsd:表示以前缀xsd开头的元素或则类型来自于http://www ...
- 用GitLab搭建自己的私有GitHub
相信很多技术人员都知道有个github造福开发人员的git(分布式版本管理工具)代码管理社区,可以说现在git是开发人员的必备技能之一 本周有个朋友公司需要一个类似github的代码仓库管理系统,本人 ...
- bootstrap响应式实用工具
- su terminal get around---docker root
su : must be run from a terminal After some googling, I found the solution from Tero's glob. If you ...
- Memcached Java Client API详解
针对Memcached官方网站提供的java_memcached-release_2.0.1版本进行阅读分析,Memcached Java客户端lib库主要提供的调用类是SockIOPool和MemC ...
- C++ 字符串操作常见函数
//字符串拷贝,排除指定字符 char *strcpy_exclude_char(char *dst, const int dst_len, const char *src, const char * ...
- php--数据库三范式
关系数据库的几种设计范式介绍1.第一范式(1NF) 在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库. 所谓第一范式(1NF)是指数据 ...
- ArcGIS API for Silverlight 当DataGrid选中项时,地图聚焦弹出窗口,并可以播放音频文件
原文:ArcGIS API for Silverlight 当DataGrid选中项时,地图聚焦弹出窗口,并可以播放音频文件 先看效果图,然后上代码: <UserControl x:Class= ...