163 lines
5.1 KiB
TypeScript
163 lines
5.1 KiB
TypeScript
// Learn TypeScript:
|
|
// - https://docs.cocos.com/creator/manual/en/scripting/typescript.html
|
|
// Learn Attribute:
|
|
// - https://docs.cocos.com/creator/manual/en/scripting/reference/attributes.html
|
|
// Learn life-cycle callbacks:
|
|
// - https://docs.cocos.com/creator/manual/en/scripting/life-cycle-callbacks.html
|
|
|
|
const {ccclass, property} = cc._decorator;
|
|
|
|
@ccclass
|
|
export default class Ball extends cc.Component {
|
|
size: cc.Size;
|
|
_posX: number;
|
|
_posY: number;
|
|
_touch: boolean;
|
|
_id: number;
|
|
GameManager: any;
|
|
tube_Array: number[][];//管子数组
|
|
|
|
// LIFE-CYCLE CALLBACKS:
|
|
|
|
onLoad () {
|
|
// this.init();
|
|
this._touch = false;
|
|
this.node.on(cc.Node.EventType.TOUCH_START, this.touchStart, this);
|
|
this.node.on(cc.Node.EventType.TOUCH_MOVE, this.touchMove, this);
|
|
this.node.on(cc.Node.EventType.TOUCH_END, this.touchEnd, this);
|
|
this.node.on(cc.Node.EventType.TOUCH_CANCEL, this.touchEnd, this);
|
|
}
|
|
|
|
init(type,id){
|
|
this.set_Touch(type)
|
|
if(this.node.parent.name != "GameArea"){
|
|
return;
|
|
}
|
|
this.GameManager = this.node.parent.parent.getComponent("GameManager");
|
|
this.tube_Array = this.GameManager.tube_Array;
|
|
this._posX = this.node.x;
|
|
this._posY = this.node.y;
|
|
this.size = cc.winSize;
|
|
|
|
this._id = id;
|
|
}
|
|
|
|
set_Touch(type){
|
|
this._touch = type;
|
|
}
|
|
|
|
start () {
|
|
}
|
|
//开始点击,提高层级
|
|
touchStart (event) {
|
|
if(this._touch){
|
|
return true;
|
|
}
|
|
else{
|
|
return false;
|
|
}
|
|
}
|
|
//移动小球,跟随手指移动
|
|
touchMove (event) {
|
|
this.node.zIndex = 2;
|
|
if(this._touch){
|
|
var touchTemp = cc.v2(event.touch._point.x-this.size.width/2,event.touch._point.y-this.size.height/2);
|
|
this.node.x = touchTemp.x;
|
|
this.node.y = touchTemp.y;
|
|
}
|
|
}
|
|
//松手,还原层级,判断是否落到玻璃管内
|
|
touchEnd (event) {
|
|
//先判断是否是回收
|
|
this.node.zIndex = 0;
|
|
if(this._touch){
|
|
var jg = this.getPos(cc.v2(this.node.x,this.node.y));
|
|
if(jg == 0){
|
|
this.node.x = this._posX;
|
|
this.node.y = this._posY;
|
|
}
|
|
else if(jg == 1 && this._posX == -210){
|
|
this.node.x = this._posX;
|
|
this.node.y = this._posY;
|
|
}
|
|
else if(jg == 2 && this._posX == 0){
|
|
this.node.x = this._posX;
|
|
this.node.y = this._posY;
|
|
}
|
|
else if(jg == 3 && this._posX == 210){
|
|
this.node.x = this._posX;
|
|
this.node.y = this._posY;
|
|
}
|
|
else{
|
|
this.runEnter(jg);
|
|
}
|
|
this._posX = this.node.x;
|
|
this._posY = this.node.y;
|
|
}
|
|
}
|
|
//执行进管子动画
|
|
runEnter(jg){
|
|
if(jg == 1 && this.tube_Array[0].length < 3){
|
|
var height = -100+this.tube_Array[0].length*100;
|
|
cc.fx.Notifications.emit("moveTube",{id:this._id,tube:0,
|
|
start_Pos:cc.v2(this._posX,this._posY),
|
|
end_Pos:cc.v2(-210,height)});
|
|
cc.tween(this.node)
|
|
.to(0.2,{x:-210})
|
|
.to(0.25,{y:height})
|
|
.call(()=>{
|
|
this._posX = this.node.x;
|
|
this._posY = this.node.y;
|
|
})
|
|
.start();
|
|
}
|
|
else if(jg == 2 && this.tube_Array[1].length < 2){
|
|
var height = -100+this.tube_Array[1].length*100;
|
|
cc.fx.Notifications.emit("moveTube",{id:this._id,tube:1,
|
|
start_Pos:cc.v2(this._posX,this._posY),
|
|
end_Pos:cc.v2(0,height)});
|
|
cc.tween(this.node)
|
|
.to(0.2,{x:0})
|
|
.to(0.25,{y:height})
|
|
.call(()=>{
|
|
this._posX = this.node.x;
|
|
this._posY = this.node.y;
|
|
})
|
|
.start();
|
|
}
|
|
else if(jg == 3 && this.tube_Array[2].length < 1){
|
|
var height = -100+this.tube_Array[2].length*100;
|
|
cc.fx.Notifications.emit("moveTube",{id:this._id,tube:2,
|
|
start_Pos:cc.v2(this._posX,this._posY),
|
|
end_Pos:cc.v2(210,height)});
|
|
cc.tween(this.node)
|
|
.to(0.2,{x:210})
|
|
.to(0.25,{y:height})
|
|
.call(()=>{
|
|
this._posX = this.node.x;
|
|
this._posY = this.node.y;
|
|
})
|
|
.start();
|
|
|
|
}
|
|
}
|
|
|
|
getPos(point){
|
|
var jg = 0;
|
|
var tube1 = this.GameManager.tube1;var tube2 = this.GameManager.tube2;var tube3 = this.GameManager.tube3
|
|
var rect1 = cc.rect(tube1.x, tube1.y, tube1.width, tube1.height);
|
|
var rect2 = cc.rect(tube2.x, tube2.y, tube2.width, tube2.height);
|
|
var rect3 = cc.rect(tube3.x, tube3.y, tube3.width, tube3.height);
|
|
var nodeRect = cc.rect(point.x, point.y, this.node.width, this.node.height);
|
|
if (nodeRect.intersects(rect1)) jg = 1;
|
|
else if (nodeRect.intersects(rect2)) jg = 2;
|
|
else if (nodeRect.intersects(rect3)) jg = 3;
|
|
return jg;
|
|
}
|
|
|
|
|
|
// update (dt) {
|
|
|
|
// }
|
|
}
|