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

第二十七节 检测旋转碰撞

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

检测能否旋转,就是判断方块旋转之后会不会与已经固定的点重合,或者,旋转之后,是否有点跑到屏幕外了。在上一节的旋转方块中,已经记录了旋转之后的点,所以旋转碰撞的代码直接添加到旋转方块的方法中即可,下面是修改后的旋转方块方法:

// 旋转方块
void RotateBlock()
{
    // 记录旋转后的方块数据
    List<MyPoint> rotatedBlockData = new List<MyPoint>();
    // 记录世界坐标下的方块数据
    List<MyPoint> rotatedBlockDataInWorld = new List<MyPoint>();

    // 获取方块宽
    int blockWidth = _blockLayer.Size._width;
    // 开始旋转
    foreach (var item in _blockLayer.ViewData)
    {
        MyPoint rotated = new MyPoint();
        rotated._list = item._line;
        rotated._line = blockWidth - item._list - 1;
        // 存入旋转后的方块数据
        rotatedBlockData.Add(rotated);
    }

    // 转换坐标
    ConvertPointInWorld(rotatedBlockData, rotatedBlock-DataInWorld);

    // 判断碰撞
    foreach (var point in rotatedBlockDataInWorld)
    {
        // 只要发现有点跑到屏幕外 或者 与固定方块层的点重合了
        if (point._list > 9 || _defaultLayer.IsCanSee(point))
            return;
    }

    // 替换成旋转后的方块数据
    _blockLayer.ViewData = rotatedBlockData;

    _screenMain.RefreshScreen();
}

好了,那么方向键到这里就告一段落了,下面,我们要让游戏继续下去,不能总是只有一个方块。

代码链接:https://pan.baidu.com/s/1YWflEaT5oJ-0Hb0a6obVVA
提取码:1jqr

上一篇 下一篇

猜你喜欢

热点阅读