上次我们说到了拼图图片的整张显示,今天我们继续,今天我们主要说下拼图方块的移动。
1. 在做方块的移动前,我们先做图片背景的随机更换。
(1)打开game.ts脚本。修改之前声明的装饰器。
@property({type:SpriteFrame})
spf=null
改成数组
@property({type:[SpriteFrame]})
spf=[]
(2)打开Canvas节点,在之前的Spf处,点击重新设置
(3)然后填上数字,表示该数组有多少个元素,例如,现在我有两张图片背景需要随机的,那就填2。
(4)关联图片背景
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);//每一块的高度
3. (1)接下来我们还需要修改getspf函数。
let sp=this.spf[this.randomNum].clone()
(2)测试下,没问题,可以随机更改背景图片了,当然我这里只有做了两张的测试。你们可以放多几张来进行测试。
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
}
(2)在addjigsawItemContent函数里增加触摸事件的监听。
node_item.on(Input.EventType.TOUCH_END, this.onTouchEnd, this);
5. 共同调用checkMove函数时,还要做一些区别的处理。我们声明一个变量,用来区分是拼图模式还是华容道的模式。这些我们下一再实现。
好了今天就到这里了,主要完成图片的随机变换。下次我们继续。可能写的过程中还有很多不好的地方,希望大家能指出来,在此,谢谢大家