上次我们说到了判断两个方块之间能否移动,今天我们继续,今天我们说下如何处理方块的移动。废话少说,下面我们直接开始。
1. (1)打开game.ts脚本我们新增一个函数dealMove,专门用来处理方块的移动。
//处理方块的移动
dealMove(num,pos){
let touch_pos=new Vec3()
let children=this.bg.children //获取bg下的所有节点
for (let i = 0; i < children.length; i++) {
let itemjs=children[i].getComponent(item)
if(itemjs && itemjs.i_num ==num ){ //
touch_pos=children[i].getPosition() //获取当前被点击的坐标
}
}
for (let i = 0; i < children.length; i++) {
let itemjs=children[i].getComponent(item)
if(itemjs && itemjs.i_num ==num ){ //
children[i].setPosition(pos) //被点击的方块的移动到空的方块处
}
if(itemjs && itemjs.is_end){ //
children[i].setPosition(touch_pos) //原来空的方块移动到被点击的位置
}
}
}
(2)在checkMove函数里进行调用
(3)测试下,没问题,这样方块移动功能就做完了
2. 目前,我们方块里的数字还是按顺序的,我们要打乱下顺序。先说下这个方案,我们之前已经写了一个函数用来移动方块了,我们只需再写一个函数,随机调用移动函数就可以了
(1)打开game.ts脚本,我们添加一个函数randomItem,
//打乱顺序
randomItem(){
let children=this.bg.children //获取bg下的所有节点
for (let i = 0; i < children.length; i++) {
let itemjs=children[i].getComponent(item)
if(itemjs ){ //只获取itemContent节点的
let i_random=Math.random() * 10 //产生一个随机数
if(i_random <=6){
this.checkMove(children[i].getPosition(),itemjs.i_num)
}
}
}
}
(2)在initklotski函数里,通过循环的方式调用randomItem函数
//随机方块
for (let i = 0; i < 100; i++) {
this.randomItem()
}
(3)我们看下效果,已经打乱顺序了,循环越多,打乱的效果就越好。但是这种打乱的方法不是很好,后面有时间再优化下。
好了今天就到这里了,主要说了两个方块的移动和方块的打乱。下次我们继续。可能写的过程中还有很多不好的地方,希望大家能指出来,在此,谢谢大家