[原创]unity教程之2048游戏03

来源:互联网 发布:消防大数据平台 编辑:程序博客网 时间:2024/06/18 10:23
前面讲完了,游戏一开始生成两个方块在随机的位置(而且是2和4的随机数字)。
 那么完成了随机生成方块,现在要实现移动方块了。按键上下左右(wsad)来移动方块。
1,前面的第6点已经给出方块的完整的代码了,这里把思路讲讲。
  1-1,首先是newPos = transform.position;,这里newPos就是我们用来控制移动的
 
void Update () {
      transform.position=Vector3.MoveTowards(transform.position,newPos,25.0f);

      }
当newPos改变的时候,方块就朝newPos的位置移动。
 1-2,那么怎么改变newPos呢,或者说什么样的情况下改变呢,我们通过建立changePos()这里函数来改变,带有参数的,到时候要用到
 
  public void changePos(int temIndex){
      newPos.x = -132f + temIndex *88f;//这个是根据实际图片的尺寸知道的,当temIndex等于0的时候,
//,也就是newPos.x=-132f,所以这个方块的位置是[0]
      if(needsetz){
      newPos.z = 1;//这个是让他显示在上层,作用不大
         needsetz=false;
      }

2,好了,回到public class gmmanager : MonoBehaviour {。
  建立这么一个函数
private void MoveNum(){
if (Input.GetKey (KeyCode.W)) {
         return;
       }
       if(Input.GetKey (KeyCode.S)) {
         return;
       }
       if(Input.GetKeyDown (KeyCode.A)) {
return;

if (Input.GetKeyDown (KeyCode.D)) {}

3,然后我们在if (Input.GetKeyDown (KeyCode.D)) {里面做点事情,当你点击d按键的时候
         int tempNum = 0;
          int inDex =4;
          for (intx=3; x>=0; x--) {
                 if (numArray[x] == 0)//第一,先判断是不是0空的
               continue;
             if (tempNum== 0) {//第二,这个用来进行相等的判断,一般只进入一次
                tempNum =numArray [x];
               inDex--;
               //第一次有物体,有移动的话,值要进行互换了,并且要移动了
                if (x != 3){
                  numArray[x]=0;
      numArray[index]=tempNum;
      go[x].GetComponent().changePos(index);//这个函数就起作用了,方块进行移动的动画了
       GameObjecttempOb;
      tempOb=go[x];
      go[x]=null;
      go[index]=tempOb;
                }
             } else{
                if (tempNum== numArray [x]) {
                  ///////////////合并,这个稍后方块代码,应该是整个2048最主要,也是比较难理解的逻辑了。
                 
                   }
                  
                } else{
                  
                   tempNum =numArray [x];
                  inDex--;
                  ////////
                   if (numArray[x+1] == 0) {
                                       numArray[x]=0;
      numArray[index]=tempNum;
      go[x].GetComponent().changePos(index);//这个函数就起作用了,方块进行移动的动画了
       GameObjecttempOb;
      tempOb=go[x];
      go[x]=null;
      go[index]=tempOb;
                   }
                }
               
             }
            
            
          }
         
         
       }
4,//////////////////////////////////////////////合并的代码//////////////////////////////////
if (tempNum == numArray [x]) {
                  ///////////////合并
                   inttmNum=tempNum*2;
                  tempNum=0;
                   numArray [x]= 0;
                   numArray[inDex] = tmNum;
                   go[x].GetComponent ().needsetz = true;
                   go[x].GetComponent ().changePos (inDex);
                  //这里需要延迟执行
                   Destroy (go[x].gameObject, 0.2f);
                   go [x] =null;
                  //进行合并,消失
                   for (inti=x+1; i<4; i++) {
                      if (numArray[i] == 0)
                        continue;
                     changeNumandColor (i,tmNum);
                     
                      break;
                   }
                  结束。逻辑部分还是要靠自己理解吧。
0 0
原创粉丝点击