Laya屏幕適配及尺寸屬性

一、各種尺寸屬性

2.Laya.Stage

/**設(shè)計(jì)寬度(初始化時(shí)設(shè)置的寬度Laya.init(width,height))*/
public var designWidth:Number = 0;
/**設(shè)計(jì)高度(初始化時(shí)設(shè)置的高度Laya.init(width,height))*/
public var designHeight:Number = 0;

override public function set width(value:Number):void {
    this.designWidth = value;
    super.width = value;
    Laya.timer.callLater(this, _changeCanvasSize);
}

override public function set height(value:Number):void {
    this.designHeight = value;
    super.height = value;
    Laya.timer.callLater(this, _changeCanvasSize);
}

/**當(dāng)前視窗由縮放模式導(dǎo)致的 X 軸縮放系數(shù)瞬浓。*/
public function get clientScaleX():Number {
    return _transform ? _transform.getScaleX() : 1;
}

/**當(dāng)前視窗由縮放模式導(dǎo)致的 Y 軸縮放系數(shù)寞埠。*/
public function get clientScaleY():Number {
    return _transform ? _transform.getScaleY() : 1;
}

3.html canvas

<div id="layaContainer">
<canvas id="layaCanvas" width="2048" height="1154"
 style="position: absolute; left: 0px; top: 0px; background: none; 
transform-origin: 0px 0px 0px; 
transform: matrix(0.5, 0, 0, 0.5, 0, 96);">
</canvas>
</div>

下面來做個(gè)測(cè)試

Laya.init(1136, 640, Laya.WebGL);
Laya.stage.screenMode = Stage.SCREEN_HORIZONTAL;
Laya.stage.alignH = Stage.ALIGN_CENTER;
Laya.stage.alignV = Stage.ALIGN_MIDDLE;
Laya.stage.scaleMode = Stage.SCALE_SHOWALL;
...
Laya.stage.on(Laya.Event.RESIZE, this, this.resize);
private resize() {
    console.log("Browser.width",Laya.Browser.width);
    console.log("Browser.height",Laya.Browser.height);
    console.log("stage.width",Laya.stage.width);
    console.log("stage.height",Laya.stage.height);
    console.log("html canvas width",Laya.Render.canvas.getAttribute("width"));
    console.log("html canvas height",Laya.Render.canvas.getAttribute("height"));
}
Browser.width 2048
Browser.height 1536
stage.width 1136
stage.height 640
html canvas width 2048
html canvas height 1154

說明:因?yàn)長(zhǎng)aya.init(1136, 640, Laya.WebGL);所以stage.width,height就是這個(gè)寬高戚丸。然后當(dāng)前是在IPAD屏幕下疗疟,因?yàn)橛昧薙CALE_SHOWALL模式梦抢,畫面上下端出現(xiàn)了白條额嘿。所以能看到Browser.height 是比html canvas height 要高一些官撼。然后切換到IPHONE5屏幕時(shí)梧躺,發(fā)現(xiàn)這三者是一致的。

二傲绣、屏幕適配

先看一下官方例子中的舞臺(tái)尺寸和矩形位置大小

    (function()
    {
        Laya.init(550, 400);
        Laya.stage.scaleMode = Stage.SCALE_NOSCALE;
        Laya.stage.bgColor = "#232628";
        createCantralRect();
    })();

    function createCantralRect()
    {
        rect = new Sprite();
        rect.graphics.drawRect(-100, -100, 200, 200, "gray");
        Laya.stage.addChild(rect);

        updateRectPos();
    }

    function updateRectPos()
    {
        rect.x = Laya.stage.width / 2;
        rect.y = Laya.stage.height / 2;
    }

在一個(gè)sprite中掠哥,以0,0為中心,繪制了200,200大小的矩形秃诵,然后添加到舞臺(tái)中心续搀。舞臺(tái)初始化大小是550,400。
那么在chrome中運(yùn)行例子顷链,按F12后目代,切換手機(jī)尺寸屈梁,通過觀察layaCanvas的width和height,就能看到不同模式下的區(qū)別(下面以豎屏為例榛了,橫屏同樣規(guī)則)

<canvas id="layaCanvas" width="550" height="400" 
style="position: absolute; left: 0px; top: 0px;
background: rgb(35, 38, 40); 
transform-origin: 0px 0px 0px; 
transform: matrix(1, 0, 0, 1, 0, 0);"
>
</canvas>
一在讶、SCALE_NOSCALE

Laya.stage.scaleMode = Stage.SCALE_NOSCALE;
應(yīng)用保持設(shè)計(jì)寬高不變,不縮放不變型霜大,stage的寬高等于設(shè)計(jì)寬高构哺。
整個(gè)應(yīng)用程序的大小固定,因此战坤,即使播放器窗口的大小更改曙强,它也會(huì)保持不變。如果播放器窗口比內(nèi)容小途茫,則可能進(jìn)行一些裁切碟嘴。
測(cè)試結(jié)果:
layaCanvas的width和height就沒變過,一直是550,400囊卜。屏幕小時(shí)會(huì)出現(xiàn)裁切娜扇,至于矩形,則一直保持在中央栅组。

Paste_Image.png
二雀瓢、SCALE_SHOWALL

Laya.stage.scaleMode = Stage.SCALE_SHOWALL;
應(yīng)用顯示全部?jī)?nèi)容,按照最小比率縮放玉掸,等比縮放不變型刃麸,一邊可能會(huì)留空白,stage的寬高等于設(shè)計(jì)寬高
整個(gè)應(yīng)用程序在指定區(qū)域中可見司浪,且不發(fā)生扭曲泊业,同時(shí)保持應(yīng)用程序的原始高寬比。應(yīng)用程序的兩側(cè)可能會(huì)顯示邊框断傲。
測(cè)試結(jié)果:
layaCanvas的width和height一直根據(jù)屏幕變化脱吱。比如IPHONE6的375,667尺寸下智政,寬度就變成最大值375认罩,而高度因?yàn)橐3?50,440的比例续捂,也等比例變成273了垦垂。
這就導(dǎo)致豎屏模式下,canvas下面會(huì)出現(xiàn)很多空白邊框

Paste_Image.png
三牙瓢、SCALE_EXACTFIT

應(yīng)用根據(jù)屏幕大小鋪滿全屏劫拗,非等比縮放會(huì)變型,stage的寬高等于設(shè)計(jì)寬高矾克。
整個(gè)應(yīng)用程序在指定區(qū)域中可見页慷,但不嘗試保持原始高寬比。可能會(huì)發(fā)生扭曲酒繁,應(yīng)用程序可能會(huì)拉伸或壓縮顯示滓彰。

Paste_Image.png

測(cè)試結(jié)果:
layaCanvas的width和height沒變過,一直是550,400州袒。但是矩形已經(jīng)變形了揭绑,切換尺寸時(shí),transform:matrix一直在變化郎哭,應(yīng)該是直接拉伸了

四他匪、SCALE_NOBORDER

應(yīng)用按照最大比率縮放顯示,寬或高方向會(huì)顯示一部分夸研,等比縮放不變型邦蜜,stage的寬高等于設(shè)計(jì)寬高。
整個(gè)應(yīng)用程序填滿指定區(qū)域亥至,不發(fā)生扭曲畦徘,但有可能進(jìn)行一些裁切,同時(shí)保持應(yīng)用程序的原始高寬比抬闯。

Paste_Image.png

測(cè)試結(jié)果:
layaCanvas的width和height沒變過井辆,一直是550,400。邊緣被填滿了溶握,不過矩形被裁切杯缺。

五、還有三種模式
/**應(yīng)用保持設(shè)計(jì)寬高不變睡榆,不縮放不變型萍肆,stage的寬高等于屏幕寬高。*/
public static const SCALE_FULL:String = "full";
/**應(yīng)用保持設(shè)計(jì)寬度不變胀屿,高度根據(jù)屏幕比縮放塘揣,stage的寬度等于設(shè)計(jì)高度,高度根據(jù)屏幕比率大小而變化*/
public static const SCALE_FIXED_WIDTH:String = "fixedwidth";
/**應(yīng)用保持設(shè)計(jì)高度不變宿崭,寬度根據(jù)屏幕比縮放亲铡,stage的高度等于設(shè)計(jì)寬度,寬度根據(jù)屏幕比率大小而變化*/
public static const SCALE_FIXED_HEIGHT:String = "fixedheight";

綜上葡兑,一般為了顯示全部?jī)?nèi)容奖蔓,我們還是常用SCALE_SHOWALL這種模式。

六讹堤、橫屏豎屏

screenMode可以改變橫屏豎屏

七吆鹤、alignH,alignV

橫向?qū)R分為左中右,縱向?qū)R分為上中下洲守。

Laya.stage.alignH = Stage.ALIGN_CENTER;
//Laya.stage.alignV = Stage.ALIGN_MIDDLE;
Laya.stage.alignV = Stage.ALIGN_BOTTOM;

這個(gè)經(jīng)過測(cè)試疑务,layaCanvas的width和height也沒變過沾凄,matrix一直在變。

Laya.stage.alignV = Stage.ALIGN_BOTTOM

END

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末知允,一起剝皮案震驚了整個(gè)濱河市搭独,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌廊镜,老刑警劉巖牙肝,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異嗤朴,居然都是意外死亡配椭,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門雹姊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來股缸,“玉大人,你說我怎么就攤上這事吱雏《匾觯” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵歧杏,是天一觀的道長(zhǎng)镰惦。 經(jīng)常有香客問我,道長(zhǎng)犬绒,這世上最難降的妖魔是什么旺入? 我笑而不...
    開封第一講書人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮凯力,結(jié)果婚禮上茵瘾,老公的妹妹穿的比我還像新娘。我一直安慰自己咐鹤,他們只是感情好拗秘,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著祈惶,像睡著了一般雕旨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上行瑞,一...
    開封第一講書人閱讀 49,760評(píng)論 1 289
  • 那天奸腺,我揣著相機(jī)與錄音餐禁,去河邊找鬼血久。 笑死,一個(gè)胖子當(dāng)著我的面吹牛帮非,可吹牛的內(nèi)容都是我干的氧吐。 我是一名探鬼主播讹蘑,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼筑舅!你這毒婦竟也來了座慰?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤翠拣,失蹤者是張志新(化名)和其女友劉穎版仔,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體误墓,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蛮粮,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了谜慌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片然想。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖欣范,靈堂內(nèi)的尸體忽然破棺而出变泄,到底是詐尸還是另有隱情,我是刑警寧澤恼琼,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布妨蛹,位于F島的核電站,受9級(jí)特大地震影響晴竞,放射性物質(zhì)發(fā)生泄漏滑燃。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一颓鲜、第九天 我趴在偏房一處隱蔽的房頂上張望表窘。 院中可真熱鬧,春花似錦甜滨、人聲如沸乐严。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)昂验。三九已至,卻和暖如春艾扮,著一層夾襖步出監(jiān)牢的瞬間既琴,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來泰國(guó)打工泡嘴, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留甫恩,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓酌予,卻偏偏與公主長(zhǎng)得像磺箕,于是被迫代替她去往敵國(guó)和親奖慌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容