|
|
@@ -37,7 +37,7 @@ export default class Guide extends cc.Component {
|
|
|
private widgets: string[] = ['top', 'bottom', 'left', 'right', 'verticalCenter', 'horizontalCenter'];
|
|
|
|
|
|
onLoad() {
|
|
|
-
|
|
|
+ // this.initTouch();
|
|
|
}
|
|
|
|
|
|
start() {
|
|
|
@@ -66,27 +66,36 @@ export default class Guide extends cc.Component {
|
|
|
this.node_dialog.opacity = 255;
|
|
|
this.targetNode = null;
|
|
|
this.event_data = null;
|
|
|
+ this.ifThrough = true;
|
|
|
let [x, y, w, h] = [null, null, null, null];
|
|
|
|
|
|
- //点击全屏下一步,显示区域不显示,点击区域全屏
|
|
|
- if (this.crtGuide.click_rect == "all") {
|
|
|
- this.node_display.width = this.node_display.height = 0;
|
|
|
- this.node_click.x = 0;
|
|
|
- this.node_click.y = 0;
|
|
|
- this.node_click.width = this.node.width;
|
|
|
- this.node_click.height = this.node.height;
|
|
|
- }
|
|
|
- else if (this.crtGuide.click_rect.indexOf("event") != -1) {//点击区域下一步,并发送事件,显示区域读配置,点击区域=显示区域
|
|
|
- this.event_data = this.crtGuide.id + "_" + this.crtStep;
|
|
|
- let arr = this.crtGuide.display_rect.split(":");
|
|
|
- x = parseInt(arr[0]);
|
|
|
- y = parseInt(arr[1]);
|
|
|
- w = parseInt(arr[2]);
|
|
|
- h = parseInt(arr[3]);
|
|
|
- this.node_click.x = x;
|
|
|
- this.node_click.y = y;
|
|
|
- this.node_click.width = w;
|
|
|
- this.node_click.height = h;
|
|
|
+ //点击全屏下一步,显示区域不显示 || 点击区域下一步,并发送事件,显示区域读配置
|
|
|
+ if (this.crtGuide.click_rect == "all" || this.crtGuide.click_rect.indexOf("event") != -1) {
|
|
|
+ //显示区域: display_rect为""表示全屏
|
|
|
+ if (this.crtGuide.display_rect.length == 0) {
|
|
|
+ this.node_display.width = this.node_display.height = 0;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ let arr = this.crtGuide.display_rect.split(":");
|
|
|
+ x = parseInt(arr[0]);
|
|
|
+ y = parseInt(arr[1]);
|
|
|
+ w = parseInt(arr[2]);
|
|
|
+ h = parseInt(arr[3]);
|
|
|
+ }
|
|
|
+ if (this.crtGuide.click_rect == "all") {
|
|
|
+ this.node_click.x = 0;
|
|
|
+ this.node_click.y = 0;
|
|
|
+ this.node_click.width = this.node.width;
|
|
|
+ this.node_click.height = this.node.height;
|
|
|
+ this.ifThrough = false;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ this.event_data = this.crtGuide.id + "_" + (this.crtStep + 1);
|
|
|
+ this.node_click.x = x;
|
|
|
+ this.node_click.y = y;
|
|
|
+ this.node_click.width = w;
|
|
|
+ this.node_click.height = h;
|
|
|
+ }
|
|
|
}
|
|
|
else {//点击按钮下一步,显示区域为配置的node,点击区域=显示区域
|
|
|
this.targetNode = cc.find("Canvas/" + this.crtGuide.click_rect);
|
|
|
@@ -200,4 +209,66 @@ export default class Guide extends cc.Component {
|
|
|
mk.guide.close();
|
|
|
this.node.destroy();
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ ///////////////// 自定义触摸监听 /////////////////
|
|
|
+ private _eventManager = cc["internal"]["eventManager"];
|
|
|
+ private _touchListener: any;
|
|
|
+ private ifThrough: boolean;
|
|
|
+ private initTouch() {
|
|
|
+ const EventListener = cc["EventListener"];
|
|
|
+ this._touchListener = EventListener.create({
|
|
|
+ event: EventListener.TOUCH_ONE_BY_ONE,
|
|
|
+ swallowTouches: false,//是否吞噬touch事件
|
|
|
+ owner: this.node_click,
|
|
|
+ mask: null,
|
|
|
+ onTouchBegan: this.onTouchStart.bind(this),
|
|
|
+ onTouchMoved: null,
|
|
|
+ onTouchEnded: this.onTouchEnded.bind(this),
|
|
|
+ onTouchCancelled: null,
|
|
|
+ });
|
|
|
+ this._eventManager.addListener(this._touchListener, this.node_click);
|
|
|
+ }
|
|
|
+
|
|
|
+ private onTouchStart(touch: cc.Touch, event: cc.Event.EventTouch): boolean {
|
|
|
+ // cc.log("touch start");
|
|
|
+ //此处必须返回true(表示接触到了节点),否则TOUCH_MOVE,TOUCH_END,TOUCH_CANCEL不触发。
|
|
|
+ if (this.ifThrough) {
|
|
|
+ const point_world_pos = touch.getLocation();
|
|
|
+ let localPoint = this.node.parent.convertToNodeSpaceAR(new cc.Vec2(point_world_pos.x, point_world_pos.y));
|
|
|
+ // let localPoint = mk.game.localConvertWorldPointARCenter()
|
|
|
+ let result = this.pointInPoly(localPoint, this.node_click);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 点是否在节点宽高范围内
|
|
|
+ * @param point 点击的点
|
|
|
+ * @param node
|
|
|
+ * @returns
|
|
|
+ */
|
|
|
+ private pointInPoly(point: cc.Vec2 | cc.Vec3, node: cc.Node) {
|
|
|
+ const self_node_pos = node.getPosition();
|
|
|
+ if (point.x >= (self_node_pos.x - (this.node_click.width / 2)) &&
|
|
|
+ point.x <= (self_node_pos.x + (this.node_click.width / 2)) &&
|
|
|
+ point.y >= (self_node_pos.y - (this.node_click.height / 2)) &&
|
|
|
+ point.y <= (self_node_pos.y + (this.node_click.height / 2))) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ private onTouchEnded(touch: cc.Touch, event: cc.Event.EventTouch): void {
|
|
|
+ // cc.log("touch end");
|
|
|
+ this.clickNodeClick();
|
|
|
+ }
|
|
|
+
|
|
|
+ protected onDestroy(): void {
|
|
|
+ // super.onDestroy();
|
|
|
+ this._eventManager.removeListener(this._touchListener, this.node_click);
|
|
|
+ }
|
|
|
}
|