第二十七节 检测旋转碰撞

作者: 安静的程序员 | 来源:发表于2019-06-25 09:12 被阅读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

    相关文章

      网友评论

        本文标题:第二十七节 检测旋转碰撞

        本文链接:https://www.haomeiwen.com/subject/efvzqctx.html