我智商爆棚
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

101 lines
3.2 KiB

const {ccclass, property} = cc._decorator;
@ccclass
export default class BGMove extends cc.Component {
@property({displayName: '播放速度'})
speed: number = 0; // 移动时控制速度的变量
@property({displayName: '播放方向0横1竖'})
orient: number = 0;// 0横 1竖
@property({displayName: '往左往右'})
leftOrRight: number = 0;// 0左 1右
@property( {displayName: '背景图', type: cc.Node})
bgArr: cc.Node[] = []; // 用于管理背景图片结点的数组,记得回cocos面板中添加数组的结点数量
curBg: cc.Node = null;// 当前播放背景
nextBg: cc.Node = null;// 即将播放背景
curIndex: number = 0;// 当前播放背景索引
xy:string = 'x';// x | y
wh:string = 'w';// 宽高
// 是否可以播放
move:boolean = true;
isStop:boolean = false;
start () {
if (this.bgArr.length == 0) {
this.move = false;
return;
}
// 如果只有一张背景图,则克隆一个
if (this.bgArr.length == 1) {
this.bgArr[1] = cc.instantiate(this.bgArr[0]);
this.bgArr[0].parent.addChild(this.bgArr[1]);
}
this.xy = this.orient == 0 ? 'x' : 'y';
this.wh = this.orient == 0 ? 'width' : 'height';
this.curBg = this.bgArr[this.curIndex];
this.nextBg = this.bgArr[this.curIndex + 1];
// 设置背景图坐标
this.setBgPosition();
}
/**
* 设置背景图坐标
*/
setBgPosition () {
if(this.leftOrRight == 0){
this.bgArr[this.curIndex][this.xy] = 0;
this.bgArr[this.curIndex + 1][this.xy] = (this.curBg[this.wh] / 2 + this.nextBg[this.wh] / 2);
}else{
this.bgArr[this.curIndex][this.xy] = 0;
this.bgArr[this.curIndex + 1][this.xy] = - (this.curBg[this.wh] / 2 + this.nextBg[this.wh] / 2);
}
}
update (dt) {
if(this.isStop){
return
}
this.bgMove();
}
/**
*
* @param bgList
* @param speed 速度
*/
bgMove() {
if (this.move) {
if(this.leftOrRight == 0){
this.curBg[this.xy] -= this.speed;
this.nextBg[this.xy] -= this.speed;
if( Math.abs(this.curBg[this.xy]) >= this.curBg[this.wh]) {
this.curBg = this.nextBg;
this.nextBg = this.bgArr[this.curIndex ++ % this.bgArr.length];
this.nextBg[this.xy] = this.curBg[this.xy] + this.curBg[this.wh] / 2 + this.nextBg[this.wh] / 2
}
}else{
this.curBg[this.xy] += this.speed;
this.nextBg[this.xy] += this.speed;
// 当前背景图已播放完
if(this.curBg[this.xy] >= this.curBg[this.wh]) {
this.curBg = this.nextBg;
this.nextBg = this.bgArr[this.curIndex ++ % this.bgArr.length];
this.nextBg[this.xy] = this.curBg[this.xy] - this.curBg[this.wh] / 2 - this.nextBg[this.wh] / 2;
}
}
}
}
stopMove(isStop){
this.isStop = isStop
}
}