Swift遊戲實戰-跑酷熊貓 09 移除情境之外的平台

來源:互聯網
上載者:User

標籤:style   blog   http   color   os   strong   檔案   io   

 

上一節,我們寫出了一個瘋狂產生平台的東西。所謂上帝欲使其滅亡,必先使其瘋狂。所以太瘋狂都不是什麼好事,所以我們要採取一些措施,例如移除情境之外的平台。btw如果哪天你覺得自己的老闆行為乖張,難以理喻。例如明明沒什麼事做還要沒事找事讓你瘋狂加班,這時候就要小心,小心……哈哈,扯遠了。

要點:

如何判斷平台移除情境:

由於我們的平台是一個接一個的有順序的產生,所以每次我們只要判斷數組第一個平台也就是下標為0的元素是否移除情境就夠了。怎麼判斷移除情境呢?由於我們的平台的錨點是在最左邊,所以只要判斷平台的座標是否小於平台的寬度的負值即可。這一切都在move方法中進行。

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

 

這時候我們的平台工廠類的完整代碼應該是這樣,重要代碼已加粗加大

 

import SPriteKitclass 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 產生源源不斷的移動平台
相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.