用CocosCreator3.6开发一款拼图游戏(十)

155 阅读2分钟

上次我们说到了判断两个方块之间能否移动,今天我们继续,今天我们说下如何处理方块的移动。废话少说,下面我们直接开始。

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函数里进行调用

image.png

(3)测试下,没问题,这样方块移动功能就做完了

image.png

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()  

        }

image.png

  (3)我们看下效果,已经打乱顺序了,循环越多,打乱的效果就越好。但是这种打乱的方法不是很好,后面有时间再优化下。

image.png

好了今天就到这里了,主要说了两个方块的移动和方块的打乱。下次我们继续。可能写的过程中还有很多不好的地方,希望大家能指出来,在此,谢谢大家