swift语言实战晋级-第9章 游戏实战-跑酷熊猫-7-8 移动平台的算法

简介: 原文:swift语言实战晋级-第9章 游戏实战-跑酷熊猫-7-8 移动平台的算法在上个小节,我们完成了平台的产生。那么我们来实现一下让平台移动。平台的移动,我们只需要在平台工厂类中写好移动的方法,然后在GameScene类中统一控制就行了。
原文: swift语言实战晋级-第9章 游戏实战-跑酷熊猫-7-8 移动平台的算法

在上个小节,我们完成了平台的产生。那么我们来实现一下让平台移动。平台的移动,我们只需要在平台工厂类中写好移动的方法,然后在GameScene类中统一控制就行了。

在GameScene类中,有个update方法会每隔一定的时间调用,用来控制平台的移动再适合不过了。

首先,我们在GameScene类中定义一个移动速度:

 

//移动速度
var moveSpeed:CGFloat = 15

 

然后在update方法方法中调用平台工厂类的移动方法:

override func update(currentTime: CFTimeInterval) {
platformFactory.move(self.moveSpeed) 
}

 

    从上面的代码中,我们可以看出,要在平台工厂了类中定义的移动方法的名称叫move,接收的参数就是moveSpeed。那么就让我们切换到PlatformFactory类中来实现它。

func move(speed:CGFloat){
//遍历所有平台
for p in platforms{
		//x坐标的变化长生水平移动的动画
p.position.x -= speed
}
}

 

在move方法,我们要遍历平台工厂类中所有的平台,然后设置平台的x坐标的变化。持续的让x坐标产生变化,就形成了平台移动的动画。

运行一下程序,我们可以看到之前禁止在画面上的平台开始像做移动,移着移着就跑不见了……

 

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

    刚才我们扔了一个平台到游戏场景中,现在我们要源源不断的扔好多平台进游戏。那么该如何生成这些平台呢?逻辑上是这样的,平台从屏幕右边进入游戏,当平台完全进入游戏场景的时候生成新的平台,并由一定的间隔。

当平台完全移出游戏场景的时候,我们要将它移除。从场景中移除,从平台工厂类的数组中移除。

 

 

逻辑上的事情说完了,我们来看看代码中怎么实现。

    那么我们来改造FlatformFactory类。首先我们要知道平台生成后,还有多远的距离才能完全进入游戏场景。这个距离的计算公式:是平台的宽度+平台的x坐标-游戏场景的宽度。所以需要先定义一个变量来存储游戏场景的宽度:

 

//游戏场景的宽度
var sceneWidth:CGFloat = 0

 

然后我们要把距离传回GameScene,在GameScene的update方法中与移动速度moveSpeed一起来判断是否需要创建新平台。涉及到数据传输就要定义协议实现代理,那么协议是:

//定义一个协议,用来接收数据
protocol ProtocolMainScene {
    func onGetData(dist:CGFloat)
}

 

而代理是:

//ProtocolMainScene代理
var delegate:ProtocolMainScene?

 

    接下来我们要写一个新的方法,用来创建随机位置的平台。当然,在方法中会调用之前的createPlatform方法。方法名为createPlatformRandom。并调用代理的onGetData将平台完全进入游戏场景的距离传给GameScene。

//生成随机位置的平台的方法
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)
        
let platform = self.createPlatform(true, midNum: midNum, x: x, y: y)
//回传距离用于判断什么时候生成新的平台
delegate?.onGetData(platform.width + x - sceneWidth)
        
}

 

完成这些之后,我们切换到GameScene类中继续编码:首先让GameScene遵循ProtocolMainScene协议,定义一个变量,接收PlatformFactory传过来的变量:

var lastDis:CGFloat = 0.0

 

    然后在didMoveToView方法中将游戏场景的宽度传到平台工厂类实例中,并给平台工厂类实例设置代理:

//将屏幕的宽度传到平台工厂类中
platformFactory.sceneWidth = self.frame.width
//设置代理
platformFactory.delegate = self

 

这些完成后我们要在update中用lastDis不断减去平台移动的速度,当lastDis小等于0时,说明平台完全进入游戏场景,可以长生新的类了。

lastDis -= moveSpeed
if lastDis <= 0 {
platformFactory.createPlatformRandom()
}

	最后别忘了实现ProtocolMainScene协议的方法:
func onGetData(dist:CGFloat){
self.lastDis = dist       
}

 

运行一下程序,已经可以看到游戏屏幕上开始长生源源不断的平台了。

我的微信公众号

我写的破书:《Swift语言实战晋级》http://item.jd.com/11641501.html

 

 

 

目录
相关文章
|
1月前
|
机器学习/深度学习 人工智能 算法
当AI提示词遇见精密算法:TimeGuessr如何用数学魔法打造文化游戏新体验
TimeGuessr融合AI与历史文化,首创时间与空间双维度评分体系,结合分段惩罚、Haversine距离计算与加权算法,辅以连击、速度与完美奖励机制,实现公平且富挑战性的游戏体验。
|
8月前
|
存储 算法 安全
.NET 平台 SM2 国密算法 License 证书生成深度解析
授权证书文件的后缀通常取决于其编码格式和具体用途。本文档通过一个示例程序展示了如何在 .NET 平台上使用国密 SM2 算法生成和验证许可证(License)文件。该示例不仅详细演示了 SM2 国密算法的实际应用场景,还提供了关于如何高效处理大规模许可证文件生成任务的技术参考。通过对不同并发策略的性能测试,开发者可以更好地理解如何优化许可证生成流程,以满足高并发和大数据量的需求。 希望这段描述更清晰地传达了程序的功能和技术亮点。
976 14
.NET 平台 SM2 国密算法 License 证书生成深度解析
|
7月前
|
存储 负载均衡 算法
基于 C++ 语言的迪杰斯特拉算法在局域网计算机管理中的应用剖析
在局域网计算机管理中,迪杰斯特拉算法用于优化网络路径、分配资源和定位故障节点,确保高效稳定的网络环境。该算法通过计算最短路径,提升数据传输速率与稳定性,实现负载均衡并快速排除故障。C++代码示例展示了其在网络模拟中的应用,为企业信息化建设提供有力支持。
202 15
|
7月前
|
监控 算法 安全
基于 PHP 语言深度优先搜索算法的局域网网络监控软件研究
在当下数字化时代,局域网作为企业与机构内部信息交互的核心载体,其稳定性与安全性备受关注。局域网网络监控软件随之兴起,成为保障网络正常运转的关键工具。此类软件的高效运行依托于多种数据结构与算法,本文将聚焦深度优先搜索(DFS)算法,探究其在局域网网络监控软件中的应用,并借助 PHP 语言代码示例予以详细阐释。
135 1
|
8月前
|
运维 监控 算法
监控局域网其他电脑:Go 语言迪杰斯特拉算法的高效应用
在信息化时代,监控局域网成为网络管理与安全防护的关键需求。本文探讨了迪杰斯特拉(Dijkstra)算法在监控局域网中的应用,通过计算最短路径优化数据传输和故障检测。文中提供了使用Go语言实现的代码例程,展示了如何高效地进行网络监控,确保局域网的稳定运行和数据安全。迪杰斯特拉算法能减少传输延迟和带宽消耗,及时发现并处理网络故障,适用于复杂网络环境下的管理和维护。
|
6月前
|
机器学习/深度学习 存储 Kubernetes
【重磅发布】AllData数据中台核心功能:机器学习算法平台
杭州奥零数据科技有限公司成立于2023年,专注于数据中台业务,维护开源项目AllData并提供商业版解决方案。AllData提供数据集成、存储、开发、治理及BI展示等一站式服务,支持AI大模型应用,助力企业高效利用数据价值。
|
7月前
|
存储 算法 安全
企业员工数据泄露防范策略:基于 C++ 语言的布隆过滤器算法剖析[如何防止员工泄密]
企业运营过程中,防范员工泄密是信息安全领域的核心议题。员工泄密可能致使企业核心数据、商业机密等关键资产的流失,进而给企业造成严重损失。为应对这一挑战,借助恰当的数据结构与算法成为强化信息防护的有效路径。本文专注于 C++ 语言中的布隆过滤器算法,深入探究其在防范员工泄密场景中的应用。
138 8
|
7月前
|
存储 监控 算法
基于 PHP 语言的滑动窗口频率统计算法在公司局域网监控电脑日志分析中的应用研究
在当代企业网络架构中,公司局域网监控电脑系统需实时处理海量终端设备产生的连接日志。每台设备平均每分钟生成 3 至 5 条网络请求记录,这对监控系统的数据处理能力提出了极高要求。传统关系型数据库在应对这种高频写入场景时,性能往往难以令人满意。故而,引入特定的内存数据结构与优化算法成为必然选择。
180 3
|
8月前
|
存储 缓存 监控
企业监控软件中 Go 语言哈希表算法的应用研究与分析
在数字化时代,企业监控软件对企业的稳定运营至关重要。哈希表(散列表)作为高效的数据结构,广泛应用于企业监控中,如设备状态管理、数据分类和缓存机制。Go 语言中的 map 实现了哈希表,能快速处理海量监控数据,确保实时准确反映设备状态,提升系统性能,助力企业实现智能化管理。
145 3
|
8月前
|
缓存 监控 算法
内网监控管理软件:PHP 语言队列算法揭秘
在数字化办公环境中,内网监控管理软件对企业的稳定运行和信息安全至关重要。本文深入介绍PHP中的队列算法及其在内网监控软件中的应用,包括监控数据收集、任务调度和日志记录等场景,通过代码示例展示其实现方法。队列算法可提高性能、保证数据顺序并实现异步处理,为企业提供高效的安全保障。
108 1

热门文章

最新文章