ARTetris-AR版俄罗斯方块的源码解析

一、项目效果

 图一

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  


 

二、项目的框架


 

三、具体代码解读

从viewDidLoad的方法开始:

一、启动

获取水平面,然后在代理方法func renderer(...)函数里面进行游戏的启动。

从67行代码开始分析:

整个TetrisConfig.swift,就这一段代码,配置图一中的黑色网格井。只是设置了宽和高度。后续可以设置颜色等,可以根据项目需求进行设置。

二、下面对 Tetromino、TetrisState、TetrisWell、TetrisScene、TetrisEngine中的功能进行分析

2.1、Tetromino 

FixedTetromino是一个存了8个点的类,奇数位是x坐标,偶数位是y坐标。

上图中的代码20行代表的就是一种方块的形状:例如

                               图6   然后[20行到23行]有4列,表示图6的4中旋转状态。

2.2、TetrisState

TetrisState指的是俄罗斯方块的形状和位置。这个形状和位置也是依赖FixedTetromino这个类的。

 

2.3、TetrisWell

TetrisWell指的就是图一 中的那个黑色网状井。这里面的代码设置很有意思。

 

private var matrix: [[Bool]] = [] //嵌套的数组.具体的我已经写了注释。

主要功能就是:如果为false,指的是当前位置并没有被方块占据。然后通过for循环进行比对来更新matrix数组的值。

 2.4、TetrisScene

主要看init 函数和show函数 createWellFrame函数。

在AR的世界里面就是SCNNode节点。

  1. 在init函数里面创建了图一中黑色网格井的绘制。
  2. 然后再看show()函数展示第一个随机生成的俄罗斯方块。

2.5、TetrisEngine

TetrisEngine游戏引擎,控制旋转、左右移动等、但是本质都是依赖Tetromino这个类来进行状态的控制。


 

四、逻辑 

  1. 所有的方块、网格都是SCNNode节点。然后Tetromino这个类储存了方块的形状。TetrisState对Tetromino再次进一步的加深,包含了该方块的位置坐标已经运动的算法。然后具体的算法无非是改变Tetromino里面具体点的值。
  2. 方块的移动也是改变Tetromino里面具体点的值。然后旋转再图6有讲解
  3. 关于俄罗斯方块在下移过程中拼接的时候,都是控制TetrisWell中的matrix数组来进行更新,从而控制整个程序中方块的状态。
  4. 具体的运动和判断就是通过for循环来对比matrix数组来进行更新,然后进行相应的处理,具体的看源码。

 


 

五、扩展

AR的特征识别是非常的简单的特征识别。能够识别平面。比如:地板的平面,桌子的平面。但是假设,能在一个复杂的环境下,识别出地面是地面,桌子是桌子,那么就可以利用这个性质做很多有用的功能,;如:室内导航。后续我也打算,集成SLAMORB2进行特征识别,集成到iOS的AR项目中,新的引擎将会很有实际用处。

 


 

六、引用

源码地址:https://github.com/exyte/ARTetris

 

我的注释后的源码地址:https://download.csdn.net/download/yuhui_now/10379609 。为避免版权问题,传的CSDN,若需要可以私信我发邮件给你。

 

 

posted on 2018-04-27 19:09  成长的船  阅读(1404)  评论(0编辑  收藏  举报

导航