egret-docs-master/Engine2D/screenAdaptation/zoomMode/README.md

170 lines
6.2 KiB
Markdown
Raw Permalink Normal View History

2024-06-19 13:32:32 +08:00
## 1.缩放模式
根据不同的项目需求,可能需要不同的缩放模式。
Egret 目前支持的模式有:`showAll`, `noScale`, `noBorder`, `exactFit`, `fixedWidth`, `fixedHeight`, `fixedNarrow`, `fixedWide`
缩放模式的设置方法有两种:
1.在 index.html 文件中修改 `data-scale-mode` 属性。
2.在项目代码中随时修改,修改方式如下:
```
this.stage.scaleMode = egret.StageScaleMode.SHOW_ALL;
```
下面以一个图例说明各种缩放模式的含义。
该例用到一张600*600的图片emmad.jpg。该图原始显示效果
![](emmad.jpg)
在 index.html 文件中修改默认舞台大小为600*600
```
data-content-width="600"
data-content-height="600"
```
### 1.1 showAll 模式
在 index.html 文件中设置 ```data-scale-mode="showAll"```
或在项目代码中写
```
this.stage.scaleMode = egret.StageScaleMode.SHOW_ALL;
```
showAll 适配模式的显示效果:
![](5566955f3bc53.png)
showAll 模式原理图解:
![](5566955f451dd.jpg)
showAll 模式是保持宽高比,显示全部内容。缩放后应用程序内容向较窄方向填满播放器窗口,另一个方向的两侧可能会不够宽而留有黑边。
在此模式下,舞台尺寸(stage.stageWidth,stage.stageHeight)始终等于初始化时外部传入的应用程序内容尺寸。
showAll 是一种常用模式。
### 1.2 noScale 模式
在 index.html 文件中设置 ```data-scale-mode="noScale"```
或在项目代码中写
```
this.stage.scaleMode = egret.StageScaleMode.NO_SCALE;
```
noScale 适配模式的显示效果:
![](5566955f2fcbf.png)
noScale 模式原理图解:
![](5566955f3415e.jpg)
noScale 模式是不对内容进行任何缩放保持原始的1:1比例然后直接把舞台对齐到浏览器的左上角。即使在更改播放器窗口大小时它仍然保持不变。如果播放器窗口比内容小则可能进行一些裁切。
在此模式下舞台尺寸stage.stageWidth,stage.stageHeight始终跟播放器窗口大小保持一致。
### 1.3 noBorder 模式
在 index.html 文件中设置 ```data-scale-mode="noBorder"```
或在项目代码中写
```
this.stage.scaleMode = egret.StageScaleMode.NO_BORDER;
```
noBorder 模式的显示效果:
![](5566955f4ce1b.png)
noBorder 模式原理图解:
![](20170831173024.png)
noBorder 模式会根据屏幕的尺寸等比缩放内容,缩放后应用程序内容向较宽方向填满播放器窗口,不会有黑边存在,另一个方向的两侧可能会超出播放器窗口而被裁切,只显示中间的部分。
在此模式下,舞台尺寸(stage.stageWidth,stage.stageHeight)始终等于初始化时外部传入的应用程序内容尺寸。
### 1.4 exactFit 模式
在 index.html 文件中设置 ```data-scale-mode="exactFit"```
或在项目代码中写
```
this.stage.scaleMode = egret.StageScaleMode.EXACT_FIT;
```
exactFit 模式的显示效果:
![](5566955f23279.png)
exactFit 模式原理图解:
![](5566955f24d39.jpg)
exactFit 模式是不保持原始宽高比缩放应用程序内容,缩放后应用程序内容正好填满播放器窗口。简单的说就是不按照原来内容的比例,直接拉伸,暴力填充整个屏幕。
在此模式下,舞台尺寸(stage.stageWidth,stage.stageHeight)始终等于初始化时外部传入的应用程序内容尺寸。
### 1.5 fixedWidth 模式
在 index.html 文件中设置 ```data-scale-mode="fixedWidth"```
或在项目代码中写
```
this.stage.scaleMode = egret.StageScaleMode.fixedWidth;
```
fixedWidth 模式的显示效果:
![](20170831163731.png)
fixedWidth 模式原理图解:
![](5566955f54baa.jpg)
fixedWidth 模式是保持原始宽高比缩放应用程序内容,缩放后应用程序内容在水平和垂直方向都填满播放器窗口,但只保持应用程序内容的原始宽度不变,高度可能会改变。
在此模式下,舞台宽度(stage.stageWidth)始终等于初始化时外部传入的应用程序内容宽度。舞台高度(stage.stageHeight)由当前的缩放比例与播放器窗口高度决定。
### 1.6 fixedHeight 模式
在 index.html 文件中设置 ```data-scale-mode="fixedHeight"```
或在项目代码中写
```
this.stage.scaleMode = egret.StageScaleMode.fixedHeight;
```
fixedHeight 模式的显示效果:
![](20170831164309.png)
fixedHeight 模式原理图解:
![](20170831175010.png)
fixedHeight 模式保持原始宽高比缩放应用程序内容,缩放后应用程序内容在水平和垂直方向都填满播放器窗口,但只保持应用程序内容的原始高度不变,宽度可能会改变。
在此模式下,舞台高度(stage.stageHeight)始终等于初始化时外部传入的应用程序内容高度。舞台宽度(stage.stageWidth)由当前的缩放比例与播放器窗口宽度决定。
### 1.7 fixedNarrow 模式
在 index.html 文件中设置 ```data-scale-mode="fixedNarrow"```
或在项目代码中写
```
this.stage.scaleMode = egret.StageScaleMode.fixedNarrow;
```
fixedNarrow 模式的显示效果:
![](20170831164918.png)
保持原始宽高比缩放应用程序内容,缩放后应用程序内容在水平和垂直方向都填满播放器视口,应用程序内容的较窄方向可能会不够宽而填充。
在此模式下,舞台高度(Stage.stageHeight)和舞台宽度(Stage.stageWidth)由当前的缩放比例与播放器视口宽高决定。
### 1.8 fixedWide 模式
在 index.html 文件中设置 ```data-scale-mode="fixedWide"```
或在项目代码中写
```
this.stage.scaleMode = egret.StageScaleMode.fixedWide;
```
fixedWide 模式的显示效果:
![](20170831165147.png)
保持原始宽高比缩放应用程序内容,缩放后应用程序内容在水平和垂直方向都填满播放器视口,应用程序内容的较宽方向的两侧可能会超出播放器视口而被裁切。
在此模式下,舞台高度(Stage.stageHeight)和舞台宽度(Stage.stageWidth)由当前的缩放比例与播放器视口宽高决定。
>fixedNarrow 模式和fixedWide 模式可以理解为fixedWidth和fixedHeight的高级封装显示效果与那两种模式类似但是决定缩放比例的方向不是定死的而是根据内容距离屏幕的边距宽窄来决定。在这两种模式下可以比较方便的布局 UI。