写这个的原因是 我从网上download了一个俄罗斯的小游戏,源码是js写的 在我看来相当的混乱而且有少量bug,然后我就改成了c#的版本,在此途中认真学习到了yield在c#中的用法和俄罗斯方块的设计思路。
首先说说我设计这种游戏的话肯定不会用到yield,因为我自认为不用这样的设计也能运行得很好,就是可能代码量会多一点。
然后看看js中的 yield,作用是挂起线程,等下次运行的时候直接跳到线程之下的步骤,
我总结了一下,主要有几个区域会用到的
js:
while(true)
{
yield;
}
在c#中写成
while(true)
{
yield return null;
} 搞定
for(i)
{ yield; }
for(i)
{ yield return i;} 搞定 太吐血了 因为js的各种yield搞不清;
还有的函数体第一句fun(){ yield;}的
我认为是fun(){ yield return 1;}的 //一般是下一帧后运行 如果函数体每帧都运行的吧
yield fun()这样的 看情况而定,如果不是 yield return StartCoroutine(fun( )),那么就是StartCoroutine(fun( )),(看函数体是不是IEnumerator)
然后说说这个游戏的设计思路: 首先全局有一个静态的管理类Manager,它附在空物体中,在场景运行的时候执行初始化操作
一些关键参数 bool[,] field; 场景的2维bool数组存储
blockNormalSpeed = 2.0f; 正常速度
blockDropSpeed = 30.0f; 方块掉落速度
blockMoveDelay = 0.1f; // 移动延迟
初始化,确定场景的真实边界,并确定2维数组field的边界,使用true表示block,false表示space,并在2维数组中的上下左右分别做一条边的true 表示有边界了不能移动过去