接上文.
我们已经可以生成随机的方块了,下面我们重新来看一下最初我们考虑的游戏流程:
系统随机产生方块 → 方块下落 同时玩家操作移动/旋转 → 方块落地,若某行被填满则消除,若超出上限则GAMEOVER
此处,系统随机产生方块部分已经完成,下面我们需要开始做方块下落,以及玩家操作的部分.但是在实现方块下落之前,我们应该意识到
首先需要一个让"方块下落"的"场景",或者说Game World,进行游戏的空间位置场景,无论你怎么称呼都可以.
原来的BlockBuild直接用于生成"下一个"玩家操控\下落的方块,我们的第一个方块也要由其产生,所以不用调整具体参数,只要给他一个背景PANEL,加一个说明文字text就可以了.
然后再建立一个空物体,给他一个背景,一个用于开始测试的按钮,结构如上图所示.
然后写控制游戏流程的代码,点击按钮时,开始游戏,令BlockBuilder产生一个随机方块,并将随机方块置于GameArea的指定初始位置.然后再生成一个随机方块于BlockBuild中显示,
在当前方块落地后,使用该方块继续游戏.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class dmGameArea : MonoBehaviour {
public dmBlockBuilder blockBuilder;
public Vector2 areaSize;
public Vector2 initPos;
RectTransform myRectTransform { get { return GetComponent(); } }
dmBlock nowControlBlock;
// Use this for initialization
void Start () {
myRectTransform.sizeDelta = new Vector2(areaSize.x * blockBuilder.squareSize.x, areaSize.y * blockBuilder.squareSize.y);
}
// Update is called once per frame
void Update () {
}
public void StartGame()
{
if (nowControlBlock != null)
{
blockBuilder.DestroySquares(nowControlBlock);
}
blockBuilder.BuildRandomBlock();
NextBlock();
}
public void NextBlock()
{
PutInBlock(blockBuilder.nowBlock);
blockBuilder.BuildRandomBlock();
}
public void PutInBlock(dmBlock block)
{
nowControlBlock = block;
blockBuilder.nowBlock = null;
foreach(GameObject square in block.squareList)
{
square.transform.SetParent(transform);
}
MoveBlockTo(block,initPos);
}
public void MoveBlockTo(dmBlock onMoveBlock,Vector2 targetPos)
{
for(int i = 0; i < onMoveBlock.bindBase.squareCoordList.Count; i++)
{
Vector2 squareCoord = targetPos + onMoveBlock.bindBase.squareCoordList[i];
onMoveBlock.squareList[i].transform.localPosition = AreaPos2Local(squareCoord);
onMoveBlock.squareList[i].SetActive(squareCoord.y >= 0);
}
}
public Vector2 AreaPos2Local(Vector2 areaPos)
{
return new Vector2((areaPos.x + 0.5f) * blockBuilder.squareSize.x, - (0.5f + areaPos.y) * blockBuilder.squareSize.y);
}
}
在GameArea 中,我建立了一个x向右为正,y向下为正,一个正方形为单位的坐标系,因为此坐标系与Unity中的Scene坐标系不同,所以编写了AreaPos2Local函数来进行转换.
配置参数如下
绑定按钮和GameAreaPlay运行调试,点击按钮,可以看到功能已经成功实现.
目录
(一) 定义方块
(二) 搭建方块UI和生成方块.
(三) 搭建场地UI和游戏流程控制
(四) 方块下落和落地判定
(五) 方块平移和旋转
(六) 方块消除