在形状下落的方法中添加判断去控制是否能够下落
private bool canFall = true;//能否下落
/// <summary>
/// 下落
/// </summary>
private void Fall()
{
if (canFall == false)
{
return;
}
Vector3 curPos = transform.position;
Vector3 targetPos = curPos;
targetPos.y -= 1;
transform.position = targetPos;
if (GameController.Instance.IsValidPos(transform) == false)
{
targetPos.y += 1;
transform.position = targetPos;
FallToBottom();
}
}
/// <summary>
/// 下落到了底部
/// </summary>
private void FallToBottom()
{
canFall = false;
GameController.Instance.CurBlock = null;
}
现在形状与形状之间并不会叠加,而是会重叠在一起,在GameController脚本中编写方法,将每个方块位置添加到地图数组中(注意必须对每个方块的位置进行四舍五入取整操作)
/// <summary>
/// 将每个方块位置添加到地图数组中
/// </summary>
/// <param name="shapeTran"></param>
public void AddEachBlockTransToMapArray(Transform shape)
{
foreach (Transform block in shape.transform)
{
if (block.GetComponent<SpriteRenderer>() == null)
{
continue;
}
Vector2 blockPos = block.position;
blockPos = new Vector2(Mathf.RoundToInt(blockPos.x), Mathf.RoundToInt(blockPos.y));
mapArray[(int)blockPos.x, (int)blockPos.y] = block;
}
}
当形状下落到底部时,将每一个方块的位置添加到地图数组中
/// <summary>
/// 下落到底部
/// </summary>
private void FallToBottom()
{
canFall = false;
GameController.Instance.CurShape = null;
//方块下落到底部时将每个方块位置添加到地图数组中
GameController.Instance.AddEachBlockTransToMapArray(transform);
}
控制形状的左右移动
private void Update()
{
//控制左右移动
ControlMovement();
}
/// <summary>
/// 控制左右移动
/// </summary>
private void ControlMovement()
{
float h = 0;
if (Input.GetKeyDown(KeyCode.RightArrow))
{
h = 1;
}
else if (Input.GetKeyDown(KeyCode.LeftArrow))
{
h = -1;
}
Vector3 curPos = transform.position;
Vector3 targetPos = curPos;
targetPos.x += h;
transform.position = targetPos;
if (GameController.Instance.IsValidPos(transform) == false)
{
targetPos.x -= h;
transform.position = targetPos;
}
}
控制形状的旋转
private void Update()
{
//控制旋转
ControlRotate();
}
/// <summary>
/// 控制旋转
/// </summary>
private void ControlRotate()
{
if (Input.GetKeyDown(KeyCode.UpArrow))
{
Transform rotateTrans = transform.Find("CenterPos");
transform.RotateAround(rotateTrans.position, Vector3.forward, -90);
if (GameController.Instance.IsValidPos(transform) == false)
{
transform.RotateAround(rotateTrans.position, Vector3.forward, 90);
}
}
}
控制加速下落










