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

278 阅读2分钟

上次我们说到了拼图图片的整张显示,今天我们继续,今天我们主要说下拼图方块的移动。

1. 在做方块的移动前,我们先做图片背景的随机更换。

(1)打开game.ts脚本。修改之前声明的装饰器。

    @property({type:SpriteFrame})

    spf=null

改成数组

    @property({type:[SpriteFrame]})

    spf=[]

(2)打开Canvas节点,在之前的Spf处,点击重新设置

image.png

(3)然后填上数字,表示该数组有多少个元素,例如,现在我有两张图片背景需要随机的,那就填2。

image.png

(4)关联图片背景

image.png

2. 打开game.ts脚本,在initjigsaw函数里处理随机图片。主要就是生成一个随机数,但随机数的范围必须在数组的元素的总数之内。

        this.randomNum=Math.floor(Math.random() * 2) //生成随机数

        this.itemWith=Math.round(this.spf[this.randomNum].getRect().width / this.itemNum);//每一块的宽度    

        this.itemHight=Math.round(this.spf[ this.randomNum].getRect().height / this.itemNum);//每一块的高度

image.png

3. (1)接下来我们还需要修改getspf函数。

    let sp=this.spf[this.randomNum].clone()

image.png

(2)测试下,没问题,可以随机更改背景图片了,当然我这里只有做了两张的测试。你们可以放多几张来进行测试。

image.png

4. 在做方块移动之前,我们还需要判断下哪些方块是可以移动的。

(1)在initjigsaw函数处获取两个方块之间的距离,因为这些方方不是正方形,所以还要判断下,取最长距离的那个值。

        let distance_item_w=this.itemWith+this.interval  //两个块之间的距离

        let distance_item_h=this.itemHight+this.interval  //两个块之间的距离

        if(distance_item_w > distance_item_h){

            this.distance_item=distance_item_w

        }else{

            this.distance_item=distance_item_h

        }

image.png

(2)在addjigsawItemContent函数里增加触摸事件的监听。

  node_item.on(Input.EventType.TOUCH_END, this.onTouchEnd, this);

image.png

  5. 共同调用checkMove函数时,还要做一些区别的处理。我们声明一个变量,用来区分是拼图模式还是华容道的模式。这些我们下一再实现。

好了今天就到这里了,主要完成图片的随机变换。下次我们继续。可能写的过程中还有很多不好的地方,希望大家能指出来,在此,谢谢大家