在讲框架的时候,还用这种跨模块的调用不合适吧
在讲框架的时候,还用这种跨模块的调用不合适吧
public Model model;
public View view;
void Awake(){
model=GameObject.Find
扩展的写法
MVC model view controller
学到这里时,已按FSM和MVC架构,实现所有游戏逻辑。
布局时添加Horizontal Layout Group会为控件统一布局
加载当前场景
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
在脚本Model里添加IsGameOver()方法
在脚本GameManager里调用
CheckMap(),CheckRowIsFull(),DeleteRow(),MoveDownRow(),MoveDownRowsAbove()
Public Const int MAX_ROWS=23;
public const int MAX_COLUMNS=10;
Private Transform [,] map=New Transform[MAX_COLUMNS,MAX_ROWS];
public bool IsValidMapPosition(Transform t){}
(注意旋转之后取整)
可另外设计一个工具类Vector3Extension
private bool IsInsideMap(Vector2 pos){}
最高分数的的显示为什么是得到分数之后才显示
public override void DoBeforeEntering()
{
ctrl.view.ShowGameUI(ctrl.model.Score,ctrl.model.HighScore);
1.在Shape脚本中定义变量isPause(bool),timer(float),stepTime(float);
2.Void Update(){
if(isPause) return;
timer+=time.deltaTime
if(timer>stepTime)
{
timer=0;
fall();
}
}
3.定义Fall()方法;
1.定义一个Shape,currentShape=null,来判断方块是否落下,如果为null,调用SpawnShape。
2.给Shape脚本添加函数InitColor,用于初始化方块的颜色。
3.gamemanager脚本添加放StartGame和PauseGame函数,控制bool变量isPause。
4.在Ctrl脚本添加gamemanager引用。
5.在PlayState脚本中的函数DoBeforeEntering和DoBeforeLeaving添加StartGame和PauseGame调用。
6.拖放赋值颜色和形状。
1.创建GameManager脚本挂载在ctrl下,定义bool变量isPause标记游戏是否暂停,定义public数组shapes【】和colors【】,分别用来存储7种形状和7种颜色;
2.创建函数SpawnShape来生成方块图形,定义int indexShape和indexColor索引,用Random函数随机生成;再实例化生成shape;
3.创建Shape脚本,挂载在7种形状预制体上,在Shape脚本中创建函数InitColor(Color color),给生成图形时调用。
1.打开PlayState脚本,override函数DoBeforeEntering;
2.打开View脚本,添加ShowGameUI和HideGameUI函数(设计gameui显示和隐藏动画);
3.注册OnPauseButtonClick按键,view脚本添加ShowRestartButton函数(离开PlayState状态时调用)。
1.在View脚本下添加HideMenuUI函数。
2.在MenuState脚本下添加处理点击开始游戏按钮函数OnClickStartButton;FSMSystem脚本下Transition枚举增加OnStartButtonClick;在MenuState脚本Awake函数下添调用AddTransition。
1.先调整背景的大小和位置,再在Ctrl下创建CameraManager脚本,获取主相机,创建ZoomIn(放大)和ZoomOut(缩小)函数(引入DG空间,调用mainCamera.DOOrthoSize做动画);
2.在Ctrl脚本下获取CameraManager脚本;
3.在MenuState脚本下的DoBeforeEntering函数中调用CameraManager的ZoomOut(缩小)函数。
1.在menuState脚本下,重写FSMState脚本的函数DoBeforeEntering(),运用Ctrl脚本调用View脚本下的ShowMenu函数实现菜单的显示。
2.注意将MakeFSM函数放在Start函数下,防止空指针。
3.FSMSystem脚本下的函数SetCurrentState中,增加调用DoBeforeEntering()。
设计菜单MenuUI的显示动画,在View脚本中获取logoName和menuUI的rectransform,引入DG.Tweening命名空间,创建ShowMenu类。
1.给四种状态类添加ID(在awake里添加),在FSMState里的枚举类中添加4中状态枚举,再在FSMSystem类里的addstate类中添加fsm引用,方便状态切换时的调用。
2.导入DOTWEEN插件并安装。