100 lines
3.4 KiB
TypeScript
100 lines
3.4 KiB
TypeScript
import CollisionDetection from "./CollisionDetection";
|
||
import MapConroler from "./Map";
|
||
|
||
const { ccclass, property } = cc._decorator;
|
||
|
||
@ccclass
|
||
export default class Block extends cc.Component {
|
||
|
||
// 新增缓存变量
|
||
private selfBoxColliders: cc.BoxCollider[] = [];
|
||
private allBoxColliders: cc.BoxCollider[] = [];
|
||
// @property({
|
||
// tooltip: '碰撞形状,None就是无敌,不参与碰撞',
|
||
// type: cc.Enum(BlockType),
|
||
// // default: BlockType.Nomal,
|
||
// displayName: '碰撞形状'
|
||
// })
|
||
|
||
|
||
|
||
|
||
// LIFE-CYCLE CALLBACKS:
|
||
// @property(cc.SpriteAtlas)
|
||
// UI: cc.SpriteAtlas = null;
|
||
private initialTouchOffset: cc.Vec2 = null;
|
||
private offsetTolerance = 100; // 偏移容忍度;
|
||
|
||
allBlocks: any; //所有的方块,用于计算posX,posY消除
|
||
touchPoint: cc.Vec2 = null; //触摸点
|
||
isTouch: boolean = false; //是否触摸
|
||
posX: number = 0; //地图块的X坐标
|
||
posY: number = 0; //地图块的Y坐标
|
||
moveLeft: boolean = true; //是否可以左移;
|
||
moveRight: boolean = true; //是否可以右移;
|
||
moveUp: boolean = true; //是否可以上移;
|
||
moveDown: boolean = true; //是否可以下移;
|
||
moveCorner: number = 0; //是否碰撞角落
|
||
moveY: number = 0; //是否可以上下移动;
|
||
moveX: number = 0; //是否可以左右移动;
|
||
touchPointX: number = 0; //触摸点X坐标;
|
||
touchPointY: number = 0; //触摸点Y坐标;
|
||
blockId: number = 0; //方块ID;
|
||
stacking: cc.Vec2; //叠加方块
|
||
level: number = 0; //叠加方块层数;
|
||
pz: boolean = false;
|
||
collider: any;
|
||
block_Info: any;
|
||
_touchListener: any;
|
||
relative_Position: cc.Vec2; //点击和方块相对位置
|
||
private _eventManager: any;
|
||
hit: cc.Node;
|
||
|
||
|
||
|
||
onLoad() {
|
||
// 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_CANCEL, this.touchEnd, this);
|
||
// this.node.on(cc.Node.EventType.TOUCH_END, this.touchEnd, this);
|
||
this.pz = false;
|
||
this.stacking = cc.v2(0, 0);
|
||
// this.selfBoxColliders = this.node.getComponentsInChildren(cc.BoxCollider)
|
||
// .filter(collider => collider.tag < 4);
|
||
}
|
||
|
||
|
||
start() {
|
||
|
||
}
|
||
|
||
jsonDeepClone<T>(obj: T): T {
|
||
return JSON.parse(JSON.stringify(obj));
|
||
}
|
||
|
||
init(block_Info, posX, posY, node) {
|
||
this.block_Info = this.jsonDeepClone(block_Info);
|
||
let mapInfo = MapConroler._instance.mapInfo;
|
||
//console.log("block_Info", this.block_Info);
|
||
for (let i = 0; i < mapInfo.length; i++) {
|
||
let blockRect = mapInfo[i].getBoundingBox();
|
||
// 使用 cc.Intersection.pointInRect 方法判断点是否在矩形范围内
|
||
let point = cc.v2(this.node.position.x - 5, this.node.position.y + 10)
|
||
if (blockRect.contains(point)) {
|
||
this.posX = mapInfo[i].getComponent("MapBlock").posX;
|
||
this.posY = mapInfo[i].getComponent("MapBlock").posY;
|
||
this.level = 50 + this.posX - this.posY * 3;
|
||
this.node.zIndex = this.level;
|
||
this.node.x = mapInfo[i].x + 65;
|
||
this.node.y = mapInfo[i].y - 60;
|
||
i = 10000;
|
||
break;
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
}
|
||
|
||
|