• 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,若需要可以私信我发邮件给你。

     

    但行好事,莫问前程。
  • 相关阅读:
    HTML5--Video
    线性表简述
    TortoiseSVN使用简介(转)
    JAVA EE(简述)
    WebService
    Java从零开始学四十七(注解简述)
    Java从零开始学四十六(Junit)
    二维数组---模拟斗地主
    Java从零开始学四十五(Socket编程基础)
    Java从零开始学四十四(多线程)
  • 原文地址:https://www.cnblogs.com/yuhui-snail/p/8964021.html
Copyright © 2020-2023  润新知