123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- /**
- */
- import { v3, _decorator, UITransform } from "cc";
- import { EDITOR } from "cc/env";
- import { Adapter } from "./Adapter";
- // import { Console } from "console";
- const { ccclass, property, executeInEditMode, menu } = _decorator;
- /**
- * 全屏适配
- * 用法:
- *
- * 1. 将本组件挂载在节点上即可(注意该节点不能挂在 Widget 组件)
- * 2. 3.x版本引擎旋转时不会触屏旋转事件,所以目前只能设置一个方向才是正常的
- *
- * 适配原理:
- *
- * 1. 将节点的宽高设置为安全区域的宽高
- */
- @ccclass("AdapterView")
- @executeInEditMode(true)
- @menu("Quick适配组件/AdapterView")
- export default class AdapterView extends Adapter {
- protected onChangeSize() {
- Adapter.safeArea = null as any;
- if (this.node) {
- if (this.isFullScreenAdaption) {
- // 将屏幕尺寸下的大小,转换为设计分辨率下的大小,重新给节点设置大小
- this.width = Adapter.safeArea.width / Adapter.safeArea.designPxToScreenPxRatio;
- this.height = Adapter.safeArea.height / Adapter.safeArea.designPxToScreenPxRatio;
- } else {
- // 将屏幕尺寸下的安全区域大小,转换为设计分辨率下的大小,重新给节点设置大小
- this.width = Adapter.safeArea.safe.width / Adapter.safeArea.designPxToScreenPxRatio;
- this.height = Adapter.safeArea.safe.height / Adapter.safeArea.designPxToScreenPxRatio;
- switch (this.direction) {
- case Adapter.direction.LandscapeLeft:
- this.node.setPosition(v3(Adapter.safeArea.outside.width / Adapter.safeArea.designPxToScreenPxRatio, 0));
- break;
- case Adapter.direction.LandscapeRight:
- this.node.setPosition(v3(-Adapter.safeArea.outside.width / Adapter.safeArea.designPxToScreenPxRatio, 0));
- break;
- case Adapter.direction.Portrait:
- this.node.setPosition(v3(0, -Adapter.safeArea.outside.height / Adapter.safeArea.designPxToScreenPxRatio));
- break;
- case Adapter.direction.UpsideDown:
- this.node.setPosition(v3(0, Adapter.safeArea.outside.height / Adapter.safeArea.designPxToScreenPxRatio));
- break;
- default:
- !EDITOR && console.log('获取不到设备方向,直接居中处理');
- this.node.setPosition(v3(0, 0));
- break;
- }
- }
- this.doOnAdapterComplete();
- }
- }
- }
|