Swift游戏开发之俄罗斯方块:No.5 Block Party

简介:

我实在想不出怎么才能起一个好听点的中文名字,还是用原教程中的名字,block party

如果前面的几篇教程你觉得很简单,那么是时候开始加深难度了。 在俄罗斯方块游戏中,我们的主体就是那些形状,而每一个形状都是由不同的块组成的。所以,我们需要建立一个基础类,block,用来为我们更上层的显示打基础。

首先,按照建立二维数组array2D的步骤建立一个新的class,起名叫做Block

按照下面修改你的block类


可能你已经猜到了,这不是我们block 类的全部内容。

这部分只是定义了一个enumeration, 枚举类型 : BlockColor ,如果你看了之前我们放进来的资源文件,我们的游戏一共有6种颜色的快


#1 我们定义了一个变量表示可以显示的颜色种类:6


#2 我们定义了一个枚举类型,这是一个int行的,然后它遵循一个协议  printable。 在你实际输入代码的时候,如果你没有定义description函数,那么会一直提示你printable是有错的,所以我们可以猜测如果遵循了协议Printable,那么description是必须的。

这就是为什么希望大家能手动输入代码,而不是直接复制粘贴过去的原因。


关于更多的协议知识,点击这里


#3 我们提供了所有可以枚举的选择,它们从Blue(0)开始,结束于Yellow(5)


关于更多的枚举知识,点击这里


#4 我们定义个可供计算的性质(computed property),spriteName, computed property类似一个变量,但是每次访问它的时候,它都会执行在其内部的代码块,我们原本可以在其内部放置一个函数名字,例如getSpriteName(),但是很明显,computed property 是一个更棒的选择

我们用一个switch...case 来完成这个功能


#5 我们用了另一个computed property,description,前面我们已经提到过了,因为我们采用了协议printable,所以这个description是必须的。


关于更多的computed properties知识,点击这里 


最后在#6 我们定义了一个static 函数,名字叫random(),你可以很容易从它的名字已经它内部的计算知道,这是一个返回随机颜色的函数,如果你们的函数在rawValue这里提示出错,那么请升级你的Xcode到6.1版本以上,我们在教材开篇已经提醒过大家了。


好了,让我们接下来继续完成block class的全部吧:




#1, 我们定义了一个class,它将会同时执行协议PrintableHashable, 其中hashable将允许我们的Block存储在Array2D中。


#2, 我们把我们的属性color定义为let,意味着一旦我们对它赋值之后,我们就不能再对它进行赋值了。在游戏中就表现为,当一个block颜色被分配以后,它就不能再换成别的颜色了。


想要更深入的了解var和let? 点击这里


#3, 我们定义了column和row,这两个参数将决定我们的block在屏幕上的位置。SKSpriteNode将会在GameScene对每一个block着色和动画的时候将其描绘在屏幕上。


#4, 我们其实定义了一个快照,当我们调用block.spriteName的时候其实我们调用的是block.color.spriteName


#5, 我们定义了hashable协议需要的内容,我们定义了当前block的行数和列数的亦或值以确保他们都是独一无二的,这样才能被hash出来


#6, 这个应该比较熟悉了吧,我们要完成printable协议需要的内容,注意我们不在需要@“...%@..,string”这样繁琐的形式来写一个string了,而用\()就可以轻松把我们想要的内容写入字符串,如果你的row是3, column是8,而color是blue,那么将会返回blue:[8,3]

同时还定义了init函数,这个函数比较简单吧。


最后#7, 我们自定义了一个符号= , 它有两个参数lhs和rhs,返回bool类型的值;l和r其实是等号的left和right,如果这个block的row,column和color都一样,那么我就返回ture


============================================================================

OK,到这里,我们的基础类 Block就建立好了!

感觉还好么? 我建议大家还是仔细回顾和吸收一下这几个章节介绍的内容,把没有弄懂的地方都全部自己查看一遍,文中有很多展开的链接,相当于进阶的知识,大家都不妨学习一下。

另外这周我可能不能更新教程了,因为个人原因,暂停更新2天下周一(2月2日)我将会恢复更新,到时候将能看到我们俄罗斯方块的初步样子了!

如果有进度比较快,又有些基础的同学,可以参照原版的教程先学习一下。原本教程地址在这里:https://www.bloc.io/tutorials/swiftris-build-your-first-ios-game-with-swift#!/chapters/681

但是我还是建议大家先把现在的内容都吃透,我当时研究closure就研究了整整一天才继续走教程,这样对后面的理解确实是有帮助的。而如果只是单纯把代码敲上去,然后运行一下程序,看到效果了就说:ok我学会了,其实是很不负责的,可能你对这些代码为什么这样写都不了解,怎么能说自己会了呢?

好了,我们下周一见!


目录
相关文章
|
5月前
|
API Swift iOS开发
【Swift开发专栏】Swift中的游戏开发入门
【4月更文挑战第30天】本文介绍了使用Swift进行移动游戏开发的基础知识,包括Apple的开发平台(iOS, macOS)、工具(Xcode)、2D/3D游戏框架(SpriteKit, SceneKit)以及Metal图形API。Swift游戏开发涉及游戏循环、UI设计、逻辑、图形音效和网络编程。通过实例教程展示如何在Xcode中创建2D游戏,从创建项目到实现用户交互、音效和测试。掌握这些基础知识,开发者可快速入门并逐步进阶到更复杂的游戏中。
164 1
|
5月前
|
安全 编译器 Swift
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
333 2
|
3月前
|
Unix 调度 Swift
苹果iOS新手开发之Swift 中获取时间戳有哪些方式?
在Swift中获取时间戳有四种常见方式:1) 使用`Date`对象获取秒级或毫秒级时间戳;2) 通过`CFAbsoluteTimeGetCurrent`获取Core Foundation的秒数,需转换为Unix时间戳;3) 使用`DispatchTime.now()`获取纳秒级精度的调度时间点;4) `ProcessInfo`提供设备启动后的秒数,不表示绝对时间。不同方法适用于不同的精度和场景需求。
101 3
|
2月前
|
存储 移动开发 Swift
使用Swift进行iOS应用开发:探索现代移动开发的魅力
【8月更文挑战第12天】使用Swift进行iOS应用开发,不仅能够享受到Swift语言带来的简洁、快速、安全的编程体验,还能够充分利用iOS平台提供的丰富资源和强大功能。然而,iOS应用开发并非易事,需要开发者具备扎实的编程基础、丰富的实践经验和不断学习的精神。希望本文能够为您的iOS应用开发之旅提供一些有益的参考和帮助。
|
3月前
|
Swift iOS开发 Kotlin
苹果iOS新手开发之Swift中实现类似Kotlin的作用域函数
Swift可通过扩展实现类似Kotlin作用域函数效果。如自定义`let`, `run`, `with`, `apply`, `also`,增强代码可读性和简洁性。虽无直接内置支持,但利用Swift特性可达成相似功能。
54 7
|
3月前
|
调度 Swift Android开发
苹果iOS新手开发之Swift中的并发任务和消息机制
Swift的消息机制类似Android的Handler,实现任务调度有三种方式: 1. **Grand Central Dispatch (GCD)**:使用`DispatchQueue`在主线程或后台线程执行任务。 2. **OperationQueue**:提供高级接口管理`Operation`对象。 3. **RunLoop**:处理事件如输入源、计时器,类似Android的`Looper`和`Handler`。 **示例**: - GCD:在不同线程执行代码块。 - OperationQueue:创建操作并执行。 - RunLoop:用Timer添加到RunLoop中。
87 2
|
3月前
|
安全 编译器 Swift
探索iOS开发:Swift语言的现代魔法
【7月更文挑战第11天】本文深入探讨了Swift编程语言,它如何革新iOS开发领域,以及它为开发者带来的独特优势。我们将从Swift的基础语法出发,通过实际案例分析其性能优化技巧,最后讨论Swift在跨平台开发中的潜力。文章旨在为读者提供一个全面而深入的视角,了解Swift不仅仅是一门语言,更是一种推动创新的力量。
|
5月前
|
设计模式 前端开发 Swift
使用Swift进行iOS应用开发:深入探索与最佳实践
【5月更文挑战第24天】探索Swift在iOS开发中的深度应用与最佳实践。Swift以其简洁语法、类型安全、面向对象、高性能及与Objective-C的互操作性脱颖而出。使用Xcode设置开发环境,学习Swift语法,创建并设计项目,编写业务逻辑,同时进行调试和测试。遵循MVC模式,利用SwiftUI、并发特性,并注重内存管理,持续学习新工具和技术,以实现高质量应用开发。
|
5月前
|
安全 Swift iOS开发
【Swift 开发专栏】Swift 与 UIKit:构建 iOS 应用界面
【4月更文挑战第30天】本文探讨了Swift和UIKit在构建iOS应用界面的关键技术和实践方法。Swift的简洁语法、类型安全和高效编程模型,加上与UIKit的紧密集成,使开发者能便捷地创建用户界面。UIKit提供视图、控制器、布局、动画和事件处理等功能,支持灵活的界面设计。实践中,遵循设计原则,合理组织视图层次,运用布局和动画,以及实现响应式设计,能提升界面质量和用户体验。文章通过登录、列表和详情界面的实际案例展示了Swift与UIKit的结合应用。
272 1
|
5月前
|
存储 Swift iOS开发
使用Swift开发一个简单的iOS应用的详细步骤。
使用Swift开发iOS应用的步骤包括:创建Xcode项目,设计界面(Storyboard或代码),定义数据模型,实现业务逻辑,连接界面和逻辑,处理数据存储(如Core Data),添加网络请求(必要时),调试与测试,根据测试结果优化改进,最后提交至App Store或其它平台发布。
128 0