colorBlock/assets/Script/Barrier.ts
2025-06-30 10:57:41 +08:00

100 lines
3.4 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}
}
}
}