• 俄罗斯方块游戏开发教程6:形状停靠


    本文首发于微信公众号:小蚂蚁教你做游戏。欢迎关注领取更多学习做游戏的原创教程资料,每天学点儿游戏开发知识。

    嗨!大家好,我是小蚂蚁。今天我们继续来看下一个流程:形状停靠。

    什么是形状停靠呢?就是当一个形状碰撞到任何一个已有的方块或者碰撞到下边界时,它就应该被停放在那里。

    在处理形状停靠之前,有一点儿东西需要了解,就是已经停靠的方块和正在下落的方块不是一种方块,如图,红色的表示的是已经停靠的方块,绿色的表示下落的方块。

    绿色方块的作用是展示当前下落的形状,红色方块的作用是标识出哪些位置已经摆放了方块。

    整个停靠的过程是这样的:当形状发生碰撞后,我们在当前形状对应的方块位置上创建一个新的方块,创建完新的方块之后,再将当前的这个形状移除。

    如果你看了之前的教程,对于数据抽象和表格的遍历有了一定的了解,那么这里就很容易了。

    当形状发生碰撞后,首先计算出当前形状的的“计算点”在整个数据表格中的行号列号,然后从“计算点”所在的行列号开始,依次遍历当前状态数据表格中的每一项,如果当前数据为 1 ,就在这个位置处创建一个新的方块,直到当前状态的数据表格遍历完成为止。最后,再将这个形状删除。

    其中还涉及到行列号和位置的换算,公式在上面,就不再解释了。这个换算将表面上的游戏世界和背后的看不见数据表格连接起来,其实真正的计算和逻辑处理都是以背后的数据表格为基础的,背后的工作完成之后,再将得到的结果展现到游戏的界面上。

    接下来,我们就来看一下形状停靠的逻辑实现。由于形状只在下方发生碰撞时才进行停靠,所以,我们只需要处理向下移动的逻辑即可。

    方块填充的函数。

    创建一个新的“填充方块”用于填充,为了区分两种方块,这里我将填充方块设置为绿色。

    再来看一下“填充方块”的积木逻辑。

    逻辑很简单,根据行号和列号设置自己在游戏世界中的位置,然后再在整个数据表格中自己对应的位置处设置为 1,表示当前的这个位置已经有方块填充了。

    最后,我们来预览一下。

    一个形状停靠之后,在它的各个方块的位置上创建了新的绿色填充方块,填充完成后,原有的白色形状被删除了,这个就是“形状停靠”的过程了。

    你是否疑惑为什么这里要用两种方块呢?在形状的停靠过程中使用同一个方块不行吗?为什么要把原来的删除掉,再去创建新的方块呢?

    之所以这么做是要把不同方块的职责划分清楚。构成形状的方块不需要任何的逻辑,它只是用于拼凑出当前的形状。而填充的方块需要处理后续的很多事情,例如消除处理,下落处理等。所以,我们使用两种方块,一种方块没有逻辑,只用于表现,一种方块包含逻辑,用于后续的各种处理。这样每种方块只需要专心的处理自己的职责即可,无需了解其它的事情。


    我是会做游戏也会教你做游戏的小蚂蚁,欢迎关注微信公众号【小蚂蚁教你做游戏】,领取更多学习做游戏的原创教程资料,每天学点儿游戏开发知识。

  • 相关阅读:
    如何将用户导入自己的私域流量?“分享购“案例分享
    ByteArray转byte[]的两种方式
    若依分离版 后端自定义分页
    Windows下的Linux子系统(WSL)
    SpringBoot【 Thymeleaf、SpringBoot热部署、SpringBoot整合MyBatis、 SpringBoot参数校验】(四)-全面详解(学习总结---从入门到深化)
    地铁车辆基础制动装置设计
    【Mycat2实战】四、Mycat实现分库分表【概念篇】
    论文阅读 MAML (Model-Agnostic Meta-Learning for Fast Adaptation of Deep Networks)
    数据结构经典面试之列表——C#和C++篇
    组件封装 - 消息提示框组件封装
  • 原文地址:https://blog.csdn.net/flyhorsejun/article/details/125458962