Swift游戏实战-跑酷熊猫 09 移除场景之外的平台

简介: 原文:Swift游戏实战-跑酷熊猫 09 移除场景之外的平台   上一节,我们写出了一个疯狂产生平台的东西。所谓上帝欲使其灭亡,必先使其疯狂。所以太疯狂都不是什么好事,所以我们要采取一些措施,例如移除场景之外的平台。
原文: Swift游戏实战-跑酷熊猫 09 移除场景之外的平台

 

上一节,我们写出了一个疯狂产生平台的东西。所谓上帝欲使其灭亡,必先使其疯狂。所以太疯狂都不是什么好事,所以我们要采取一些措施,例如移除场景之外的平台。btw如果哪天你觉得自己的老板行为乖张,难以理喻。例如明明没什么事做还要没事找事让你疯狂加班,这时候就要小心,小心……哈哈,扯远了。

要点:

如何判断平台移除场景:

由于我们的平台是一个接一个的有顺序的产生,所以每次我们只要判断数组第一个平台也就是下标为0的元素是否移除场景就够了。怎么判断移除场景呢?由于我们的平台的锚点是在最左边,所以只要判断平台的坐标是否小于平台的宽度的负值即可。这一切都在move方法中进行。

if platforms[0].position.x < -platforms[0].width {
        platforms[0].removeFromParent()
        platforms.removeAtIndex(0)
}

 

这时候我们的平台工厂类的完整代码应该是这样,重要代码已加粗加大

 

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 = 0
    var delegate:ProtocolMainScene?

    func createPlatformRandom(){
        let midNum:UInt32 = arc4random()%4 + 1
        let gap:CGFloat = CGFloat(arc4random()%8 + 1)
        let x:CGFloat = self.sceneWidth + CGFloat(midNum*50) + gap + 100
        let y:CGFloat = CGFloat(arc4random()%200+200)
        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, 0.9)
       

        let platform_right = SKSpriteNode(texture: textureRight)
        platform_right.anchorPoint = CGPointMake(0, 0.9)
       

        var arrPlatform = [SKSpriteNode]()

        arrPlatform.append(platform_left)
       
       
        for i in 1...midNum {
            let platform_mid = SKSpriteNode(texture: textureMid)
            platform_mid.anchorPoint = CGPointMake(0, 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[0].position.x < -platforms[0].width {
            platforms[0].removeFromParent()
            platforms.removeAtIndex(0)
        }
    }
}

 

 

项目文件地址

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

 

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

00 游戏预览

01 创建工程导入素材

02 创建熊猫类

03 熊猫跑动动画

04 熊猫的跳和滚的动作

05 踩踏平台是怎么炼成的

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

07 平台的移动

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

目录
相关文章
|
2月前
|
监控 API Swift
用Swift开发iOS平台上的上网行为管理监控软件
在当今数字化时代,随着智能手机的普及,人们对于网络的依赖日益增加。然而,对于一些特定场景,如家庭、学校或者企业,对于iOS设备上的网络行为进行管理和监控显得尤为重要。为了满足这一需求,我们可以利用Swift语言开发一款iOS平台上的上网行为管理监控软件。
204 2
|
3月前
|
移动开发 监控 Swift
使用Swift编写电脑监控录屏软件:在macOS平台上实现
在本文中,我们将探讨如何使用Swift编写一款电脑监控录屏软件,实现在macOS平台上的功能。这个软件将能够监控用户的屏幕活动,并将录制的数据自动提交到指定的网站。我们将深入讨论代码示例,以帮助您了解实现过程。
238 0
|
机器学习/深度学习 人工智能 文字识别
《MNN For Swift》移动端机器学习实战课程发布!
5期系列课程教学,最新实践分享!
842 0
《MNN For Swift》移动端机器学习实战课程发布!
|
Swift Serverless 开发者
Swift 在 GAIA 平台云端一体化的探索
Swift On GAIA Serverless Platform
1718 0
|
机器学习/深度学习 JavaScript Swift
聊聊架构、内存拷贝、Swift 新特性: iOS 面试场景复习题 ,20190720
聊聊架构、内存拷贝、Swift 新特性: iOS 面试场景复习题 ,20190720
1534 0
|
Swift
Swift UI专项训练3 第二个场景
    上一话中我们新建了一个textView,这一话我们来建一个列表,这个列表和上一话中的text不在一个页面中怎么办,直接拖拽Table View Controller到storyboard中,会多出一个屏幕来,效果如图: 注意一下左边,现在我们是有两个场景的,下面的View Controller是我们创建工程就有的,而上面的是我们刚才新建出的Table View Controller。
778 0
|
JSON API 数据格式
swift实战小程序1天气预报
       在有一定swift基础的情况下,让我们来做一些小程序练练手,今天来试试做一个简单地天气预报。
898 0
|
iOS开发 Swift C++
Swift开发笔记1.《Swift开发指南》计算器实战项目的相关心得
        本人是个IOS开发新手,之前没有接触过Objective-C语言,直接从最新的Swift学起,进行IOS8的学习开发。
964 0
|
3月前
|
安全 编译器 Swift
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
93 2
|
3月前
|
监控 Swift iOS开发
局域网计算机监控软件中利用Swift构建iOS端的移动监控应用
在局域网计算机监控软件的开发中,构建iOS端的移动监控应用是一项关键任务。本文将介绍如何利用Swift语言实现这一目标,通过多个代码示例展示关键功能的实现。
225 1