前面已经讲到了,如何得到相同类型的游戏实体了,今天就剩下对相同的游戏实体进行消除,然后更新那些没有消除的游戏实体的位置信息。我们通过计算把相同类型的游戏实体存放到一个临时的list中去,然后遍历整个list中的元素,然后根据这个临时的list对原list和dict字典进行更新就ok了。当然我们是要一列一列进行更新,所以通过临时的list我们把得到需要更新的列的信息存放在一个list中我们称其为ColumnList中,然后就是遍历ColumnList中的元素,然后根据ColumnList中元素关于列的信息进行更新,假如我们现在第一列有3个游戏物体被消除了,假如这一列总共的游戏物体有7个的话,我们先从最底下的那个元素开始访问,就是第0个元素开始访问,看dict中的索引是不是为空,为空的话就不用更新,如果不为空,我们要知道这个元素前面有没有为空,所以这里还要记录当前元素前面有几个元素为空,这里我用变量num记录,如果num=1的话,那么当前元素更新后的位置应该为当前元素在格子中y上面的索引减去num。具体代码如下:
for(int y=0;y<10;y++)
{
var key = new Point(x,y);
if (CatMange.DiCat[key] == null)
num++;
else
{
int y_change = y-num;
GameObject cat = CatMange.DiCat[key];
CatMange.DiCat[key] = null;
Point newkey = new Point(x, y_change);
CatMange.DiCat[newkey] = cat;
cat.GetComponent<CatClass>().Position = newkey;
}
}
for循环y的最大取值是9,表示一列有10个元素,point中的x表示第x列存在元素被消除,然后else中的代码就是对剩余游戏实体的位置更新。至于消除一些然后还有从上面落下来补充消掉的这个应该比消除后更新这个操作要简单的多,这里我就不讲了,这个你们可以自己独立完成。最后游戏中用到的Tween都是DoTween,这个不会的可以去它的官网查查API就可以了,这里没有用ITween,因为ITween太难用了,估计当时技术还不成熟吧,ITween不是c#程序写的,完全没有类的概念,所以来说写的比较烂的那种。又能力的可以自己模仿其他的Tween去写一个Tween插件出来。