Swift游戏实战-跑酷熊猫 09 移除场景之外的平台
上一节,我们写出了一个疯狂产生平台的东西。所谓上帝欲使其灭亡,必先使其疯狂。所以太疯狂都不是什么好事,所以我们要采取一些措施,例如移除场景之外的平台。btw如果哪天你觉得自己的老板行为乖张,难以理喻。例如明明没什么事做还要没事找事让你疯狂加班,这时候就要小心,小心……哈哈,扯远了。
要点:
如何判断平台移除场景:
由于我们的平台是一个接一个的有顺序的产生,所以每次我们只要判断数组第一个平台也就是下标为0的元素是否移除场景就够了。怎么判断移除场景呢?由于我们的平台的锚点是在最左边,所以只要判断平台的坐标是否小于平台的宽度的负值即可。这一切都在move方法中进行。
if platforms[].position.x < -platforms[].width {
platforms[].removeFromParent()
platforms.removeAtIndex()
}
这时候我们的平台工厂类的完整代码应该是这样,重要代码已加粗加大
import SPriteKit
class PlatformFactory:SKNode{
let textureLeft = SKTexture(imageNamed: "platform_l")
let textureMid = SKTexture(imageNamed: "platform_m")
let textureRight = SKTexture(imageNamed: "platform_r")
var platforms = [Platform]()
var sceneWidth : CGFloat =
var delegate:ProtocolMainScene?
func createPlatformRandom(){
let midNum:UInt32 = arc4random()% +
let gap:CGFloat = CGFloat(arc4random()% + )
let x:CGFloat = self.sceneWidth + CGFloat(midNum*) + gap +
let y:CGFloat = CGFloat(arc4random()%+)
createPlatform(midNum, x: x, y: y)
}
func createPlatform(midNum:UInt32,x:CGFloat,y:CGFloat){
let platform = Platform()
platform.position = CGPointMake(x, y)
let platform_left = SKSpriteNode(texture: textureLeft)
platform_left.anchorPoint = CGPointMake(, 0.9)
let platform_right = SKSpriteNode(texture: textureRight)
platform_right.anchorPoint = CGPointMake(, 0.9)
var arrPlatform = [SKSpriteNode]()
arrPlatform.append(platform_left)
for i in ...midNum {
let platform_mid = SKSpriteNode(texture: textureMid)
platform_mid.anchorPoint = CGPointMake(, 0.9)
arrPlatform.append(platform_mid)
}
arrPlatform.append(platform_right)
platform.onCreate(arrPlatform)
self.addChild(platform)
platforms.append(platform)
//通用公式:生成的平台的长度 + 平台的x坐标 - 主场景的宽度
delegate?.onGetData(platform.width + x - sceneWidth)
}
func move(speed:CGFloat){
for p in platforms {
p.position.x -= speed
}
if platforms[].position.x < -platforms[].width {
platforms[].removeFromParent()
platforms.removeAtIndex()
}
}
}
项目文件地址
http://yun.baidu.com/share/link?shareid=3824235955&uk=541995622
Swift游戏实战-跑酷熊猫系列
00 游戏预览
01 创建工程导入素材
02 创建熊猫类
03 熊猫跑动动画
04 熊猫的跳和滚的动作
05 踩踏平台是怎么炼成的
06 创建平台类以及平台工厂类
07 平台的移动
08 产生源源不断的移动平台
Swift游戏实战-跑酷熊猫 09 移除场景之外的平台的更多相关文章
- Swift游戏实战-跑酷熊猫 14 熊猫打滚
这节内容我们来实现熊猫打滚.思路是这样的,当熊猫起跳时记录他的Y坐标,落到平台上的时候再记录它的Y坐标.两个坐标之间的差要是大于一定数值就判断它从高处落下要进行打滚缓冲.至此跑酷熊猫已经像一个游戏的样 ...
- Swift游戏实战-跑酷熊猫 13 二段跳的实现
这节内容我们来实现熊猫的二段跳. 要点: 二段跳的逻辑: 逻辑一,第一次点击屏幕,status就会变成jump. 逻辑二,第二次点击屏幕,status就会变成jump2. 逻辑三,当status变成j ...
- Swift游戏实战-跑酷熊猫 12 与平台的碰撞
这节主要实现熊猫和平台的碰撞,实现熊猫在平台上奔跑 要点 对平台进行物理属性设置 //设置物理体以及中心点 self.physicsBody = SKPhysicsBody(rectangleOfSi ...
- Swift游戏实战-跑酷熊猫 11 欢迎进入物理世界
物理模拟是一个奇妙的事情,以此著名的游戏有愤怒的小鸟.我们在这节将会一起来了解如何设置重力,设置物理包围体,碰撞的检测. 要点: 设置物理检测的代理: 让主场景遵循SKPhysicsContactDe ...
- Swift游戏实战-跑酷熊猫 10 视差滚动背景
原理 实现 勘误 “实现”的视频中有个错误,如下 背景移动时有个错误,看红色部分,近景归位时,第二张图片的下标是1 if arrBG[0].position.x + arrBG[0].frame.wi ...
- Swift游戏实战-跑酷熊猫 08 产生源源不断的移动平台
原理 代码实现 这节内容我们一起学习下平台的生产算法. 要点: 何时生成新的平台: 当上一个平台的右边完全进入场景的时候,就可以生成新的平台类. 如何知道上一个平台完全进入场景: 主场景中有个变量la ...
- Swift游戏实战-跑酷熊猫 07 平台的移动
这节内容我们来实现平台是怎么产生移动动画的. 要点 1 利用数组存放平台 var platforms=[Platform]() 2 有新的平台产生存放进数组 platforms.append(plat ...
- Swift游戏实战-跑酷熊猫 06 创建平台类以及平台工厂类
这节内容我们一起学习下随机长度的踩踏平台的原理是怎么样的. 要点: 平台类 我们的平台类继承于SKNode,这样就能被添加进其它节点进而显示在场景中. 它有一个方法来创建平台,这个方法接收一个包含SK ...
- Swift游戏实战-跑酷熊猫 05 踩踏平台是怎么炼成的
这节内容我们一起学习下随机长度的踩踏平台的原理是怎么样的. 要点: 平台的组成 我们的平台由3部分组成 左: 中: 右: 其中中间部分是可以无缝衔接的,下面就是两个中间部分衔接在一起 要任何长度的平台 ...
随机推荐
- wordpress the_date 方法 偶尔为空的问题
估计很多人遇到这个问题: 一来是the_title(),the_permalink(),the_date()一路用下来,很正常也很正确 不爱读官方文档,因为文档中有个特别提示 文档:http://co ...
- JdbcTemplae使用入门&&Spring三种连接池配置&&Spring配置文件引用外部properties文件
JdbcTemplate的使用 Spring为了各种支持的持久化技术,都提供了简单操作的模版和回调. JdbcTemplate 简化 JDBC 操作HibernateTemplate 简化 Hiber ...
- (转)js闭包初入门
先看一段JS代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 function a(){ var num = 0; function ...
- freebsd 显示中文
来自 :http://francs3.blog.163.com/blog/static/405767272014659311700/ 只需在 ~/.cshrc 文件添加以下几行即可. --3 在~/. ...
- yaf在windows7下32位的安装教程
首先下载php_yaf.dll文件http://pecl.php.net/package/yaf/2.2.9/windows 打开扩展extension=php_yaf.dll 然后下载工具 http ...
- Tinyxml的简单应用
参考文章: 1-> http://www.cnblogs.com/phinecos/archive/2008/03/11/1100912.html 2-> http://blog.csdn ...
- php--列表展示(小实训一月考)
效果图:
- MongoDB创建用户
1.在创建用户之前,我们首先应该启动mongodb的用户验证功能,否则建立用户是没有意义的! 2.使用 //这个123用户拥有test1数据库的数据库管理员权限,拥有test2数据库的读取权限 db. ...
- sqlserver 视图能否有变量
不能,sqlserver 视图一般不能有变量,也不能带存储过程
- 将Excel导入SQL Server 只能导入数字,其他数据变为NULL怎么解决?
先新建一个TXT文件,把数据粘贴进去 再新建一个Excel文件,在菜单栏中选Data再选From Text 找到txt文件,点import 一定要选Text 点Finish,点OK. 接下来在往数据库 ...