手把手教你Unity开发俄罗斯方块

第二十八节 创建下一个方块

2019-06-25  本文已影响0人  安静的程序员

目前,当方块下落到底端后,游戏就无法继续了,我们必须要生成下一个方块。
当方块下落到底端后,如果无法下落了,就生成下一个方块。

01.实现方式

方块是放在方块图层上的,而且我的设定是方块图层上只放一个方块,那么要生成下一个方块的话,首先要清除当前方块,实则是把当前方块放置到固定图层(默认图层)上。
清除方块后,将方块图层的坐标重新移动至屏幕顶端,然后创建一个新的方块,然后方块继续下落,再创建新方块,如此循环...

02.固定方块

就是将方块图层上的方块数据放置固定方块图层。在这之前,要为图层类添加一个方法:AddViewData(),因为固定图层上本来就是有数据的,所以不能直接替换数据,而是要添加数据:

// 添加显示数据
public void AddViewData(List<MyPoint> points)
{
    foreach (var point in points)
    {
        ViewData.Add(point);
    }
}

接着,在导演类中添加一个方法:

// 固定活动方块
void FixActiveBlock()
{
    // 首先将方块的所有坐标点转换为世界坐标
    List<MyPoint> blockPointsInWorld = new List<MyPoint>();
    ConvertPointInWorld(_blockLayer.ViewData, block-PointsInWorld);
    // 将转换后的坐标点添加至固定图层
    _defaultLayer.AddViewData(blockPointsInWorld);
    // 清空方块 - 指向一个空的数据
    _blockLayer.ViewData = new List<MyPoint>();
    // 刷新屏幕
    _screenMain.RefreshScreen();
}

修改GameCore()方法,在下落失败后,调用FixActiveBlock():

// 游戏核心逻辑
void GameCore()
{
    Debug.Log("游戏核心逻辑");
    if (!MoveDownBlock())
    {
        FixActiveBlock();
    }
}
03.生成新方块

创建新方法CreateNewBlock():

// 生成方块
void CreateNewBlock()
{
    _blockLayer.Point = new MyPoint(20, 4);
    EBlockType blockType = BlockCrea-tor.GetInstance().RandomBlockType();
    _blockLayer.ViewData = BlockCrea-tor.GetInstance().CreateBlock(blockType);

    _screenMain.RefreshScreen();
}

在游戏核心逻辑中调用:

// 游戏核心逻辑
void GameCore()
{
    Debug.Log("游戏核心逻辑");
    if (!MoveDownBlock())
    {
        FixActiveBlock();
        CreateNewBlock();
    }
}

保存,编译并运行,如果没有错误,那么应该就可以按照正常的流程堆叠方块了:


代码链接:https://pan.baidu.com/s/1rfhGuiZaiIWJ-XjPCRpt8w
提取码:njs0

上一篇 下一篇

猜你喜欢

热点阅读