Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 228|回复: 0

[默认分类] ARTetris-AR版俄罗斯方块的源码解析

[复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2016-1-3 18:06:39 | 显示全部楼层 |阅读模式
    一、项目效果

    图一
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
       


      
    二、项目的框架



      
    三、具体代码解读
    从viewDidLoad的方法开始:

    一、启动
    获取水平面,然后在代理方法func renderer(...)函数里面进行游戏的启动。
    从67行代码开始分析:

    整个TetrisConfig.swift,就这一段代码,配置图一中的黑色网格井。只是设置了宽和高度。后续可以设置颜色等,可以根据项目需求进行设置。
    二、下面对 Tetromino、TetrisState、TetrisWell、TetrisScene、TetrisEngine中的功能进行分析
    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px "Helvetica Neue"; color: #435b66 }
    2.1、Tetromino  

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #000000; background-color: #ffffff }
    FixedTetromino是一个存了8个点的类,奇数位是x坐标,偶数位是y坐标。
    上图中的代码20行代表的就是一种方块的形状:例如
                                   图6   然后[20行到23行]有4列,表示图6的4中旋转状态。
    2.2、TetrisState
    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #008400; background-color: #ffffff }
    TetrisState指的是俄罗斯方块的形状和位置。这个形状和位置也是依赖FixedTetromino这个类的。
      
    2.3、TetrisWell
    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #000000; background-color: #ffffff }
    TetrisWell指的就是图一 中的那个黑色网状井。这里面的代码设置很有意思。

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #000000; background-color: #ffffff }
    span.s1 { color: #ba2da2 }
    span.s2 { color: #703daa }
    span.s3 { color: #008400 }
    private var matrix: [[Bool]] = [] //嵌套的数组.具体的我已经写了注释。
    主要功能就是:如果为false,指的是当前位置并没有被方块占据。然后通过for循环进行比对来更新matrix数组的值。

    2.4、TetrisScene


    主要看init 函数和show函数 createWellFrame函数。
    在AR的世界里面就是SCNNode节点。

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

    2.5、TetrisEngine

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


      
    四、逻辑  

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

      


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


      
    六、引用
    源码地址:https://github.com/exyte/ARTetris
      
    我的注释后的源码地址:https://download.csdn.net/download/yuhui_now/10379609 。为避免版权问题,传的CSDN,若需要可以私信我发邮件给你。
      
      
    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #000000; background-color: #ffffff }
    span.s1 { color: #ba2da2 }
    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #008400; background-color: #ffffff }
    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px "Helvetica Neue"; color: #435b66 }
    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px "Helvetica Neue"; color: #435b66 }
    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px "Helvetica Neue"; color: #435b66 }
    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px "Helvetica Neue"; color: #435b66 }
    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #000000; background-color: #ffffff }
    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #000000; background-color: #ffffff }
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-21 04:18 , Processed in 0.388580 second(s), 37 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表