第二十八节 创建下一个方块
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