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

第二十四节 处理左右移动的碰撞

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

就跟处理下落的碰撞一样,如果你理解了下落的碰撞,那么左右移动的碰撞只不过就是扫描的点不一样。左移是扫描最左边的点,右移是扫描最右边的点。直接上碰撞处理的代码:

// 能否左移
bool CanMoveLeft()
{
    // 记录位于左侧的点 - 作为碰撞点
    List<MyPoint> collidePoints = new List<MyPoint>();

    // 扫描行 - 从上至下
    for (int line = _blockLayer.Size._height - 1; line >= 0; line--)
    {
        // 扫描列 - 从左至右
        for (int list = 0; list < _blockLayer.Size._width; list++)
        {
            if (_blockLayer.IsCanSee(new MyPoint(line, list)))
            {
                collidePoints.Add(new MyPoint(line, list));
                break;
            }
        }
    }

    // 世界坐标下的碰撞点
    List<MyPoint> collidePointsInWorld = new List<MyPoint>();
    // 将所有碰撞点转换为世界坐标
    ConvertPointInWorld(collidePoints, collide-PointsInWorld);

    // 判断是否与默认图层碰撞
    foreach (var item in collidePointsInWorld)
    {
        if (item._list == 0 || _defaultLayer.IsCanSee(new MyPoint(item._line, item._list - 1)))
        {
            return false;
        }
    }

    return true;
}

右移的代码请参考附件。
碰撞的代码写完后,在左移方块中添加一个判断:

// 左移方块
void MoveLeftBlock()
{
    if (CanMoveLeft())
    {
        MyPoint newPoint = _blockLayer.Point;
        newPoint._list -= 1;
        _blockLayer.Point = newPoint;
        _screenMain.RefreshScreen();
    }
}

右移也作类似的处理。

好了,本节结束。

代码链接:https://pan.baidu.com/s/1tcSCTqAOk8j7lYMtRDgJAg
提取码:9498

上一篇 下一篇

猜你喜欢

热点阅读