原理
代码实现
这节内容我们一起学习下平台的生产算法。
要点:
何时生成新的平台:
当上一个平台的右边完全进入场景的时候,就可以生成新的平台类。
如何知道上一个平台完全进入场景:
主场景中有个变量lastDis记录着平台还有多少距离完全进入场景,他的计算公式是:
平台的长度+x坐标 - 主场景的宽度
我们通过代理将lastDis回传给主场景
delegate?.onGetData(platform.width + x - sceneWidth)
所以这里我们需要一个代理,这个代理有个方法叫onGetData:
protocol ProtocolMainScene{
func onGetData(dist:CGFloat)
}
主场景要遵循这个代理
GameScene: SKScene,ProtocolMainScene
在主场景中实现onGetData这个方法,将回传的值赋予lastDis变量
func onGetData(dist:CGFloat){ self.lastDis = dist }
lastDis是随着平台的速度做变化,也就是在update中做减法,当lastDis小等于0的时候生成新的平台:
override func update(currentTime: CFTimeInterval) { lastDis -= moveSpeed if lastDis <= 0 { println("生成新平台") //platformFactory.createPlatform(1, x: 1500, y: 200) platformFactory.createPlatformRandom() } platformFactory.move(self.moveSpeed) }
最后我们在平台工厂类中写一个新的方法用来生成随机长度的平台
func createPlatformRandom(){ //随机平台的长度 let midNum:UInt32 = arc4random()%4 + 1 //随机间隔 let gap:CGFloat = CGFloat(arc4random()%8 + 1) //x坐标 let x:CGFloat = self.sceneWidth + CGFloat( midNum*50 ) + gap + 100 //y坐标 let y:CGFloat = CGFloat(arc4random()%200 + 200) createPlatform(midNum, x: x, y: y) }
项目文件地址
http://yun.baidu.com/share/link?shareid=3824235955&uk=541995622