前面讲完了,游戏一开始生成两个方块在随机的位置(而且是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 (int x=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);//这个函数就起作用了,方块进行移动的动画了
GameObject tempOb;
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);//这个函数就起作用了,方块进行移动的动画了
GameObject tempOb;
tempOb=go[x];
go[x]=null;
go[index]=tempOb;
}
}
}
}
}
4,//合并的代码//
if (tempNum == numArray [x]) {
///合并
int tmNum=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 (int i=x+1; i<4; i++) {
if (numArray [i] == 0)
continue;
changeNumandColor (i,tmNum);
break;
}
结束。逻辑部分还是要靠自己理解吧。
转载请注明原文地址: https://ju.6miu.com/read-1303151.html