array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 Swift游戏开发之俄罗斯方块:No.5 Block Party - 爱码网

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

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

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

按照下面修改你的block类

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

可能你已经猜到了,这不是我们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的全部吧:

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

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


#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我学会了,其实是很不负责的,可能你对这些代码为什么这样写都不了解,怎么能说自己会了呢?

好了,我们下周一见!


相关文章: