London/assets/Script/Ball.ts
2024-08-28 11:14:05 +08:00

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) {
// }
}