微信小游戲屏幕適配方案

參考:https://blog.csdn.net/tianbo_zhang/article/details/80321972


工具

  • 引擎:LayaAir
  • 語言:AS3

聲明

  • 沒有全能的適配方案
  • 16/9是大部分手機的比例
  • 盡量適配大部分手機,盡量做到不剪裁和不黑邊

舞臺Stage.as的屏幕相關內容

/**自動橫屏。*/
public static const SCREEN_HORIZONTAL:String = "horizontal";
/**自動豎屏。*/
public static const SCREEN_VERTICAL:String = "vertical";
/**不縮放不變型,內容大于屏幕被裁切,小于屏幕出現(xiàn)黑邊,stage的寬高等于設計寬高。*/
public static const SCALE_NOSCALE:String = "noscale";
/**應用根據(jù)屏幕大小鋪滿全屏,非等比縮放會變型*/
public static const SCALE_EXACTFIT:String = "exactfit";
/**應用顯示全部內容,按照最小比率縮放,等比縮放不變型,一邊可能會黑邊*/
public static const SCALE_SHOWALL:String = "showall";
/**應用按照最大比率縮放顯示,寬或高方向會顯示一部分,等比縮放不變型,超過屏幕部分被裁切*/
public static const SCALE_NOBORDER:String = "noborder";
/**應用保持設計寬高不變,不縮放不變型,超出屏幕部分被裁切*/
public static const SCALE_FULL:String = "full";
/**應用保持設計寬度不變,高度根據(jù)屏幕比縮放,高度根據(jù)屏幕比率大小而變化,高度不夠會黑邊*/
public static const SCALE_FIXED_WIDTH:String = "fixedwidth";
/**應用保持設計高度不變,寬度根據(jù)屏幕比縮放,stage的高度等于設計寬度,寬度根據(jù)屏幕比率大小而變化*/
public static const SCALE_FIXED_HEIGHT:String = "fixedheight";
/**應用保持設計比例不變,全屏顯示全部內容(類似showall,但showall非全屏,會有黑邊)
根據(jù)屏幕長寬比,自動選擇使用SCALE_FIXED_WIDTH或SCALE_FIXED_HEIGHT*/
public static const SCALE_FIXED_AUTO:String = "fixedauto";

注意:stage的寬高等于設計寬高


適配參考代碼:

public function LayaUISample() {
            //初始化微信小游戲
            MiniAdpter.init(true);

            //屏幕比例
            var screenRatio:Number = Browser.height / Browser.width;
            //小于4/3一般不存在,一般是pc網(wǎng)頁
            if(screenRatio <= 4/3){
                Laya.init(750 * 4/3, 1334,WebGL);
                Laya.stage.scaleMode = Stage.SCALE_SHOWALL;
                Laya.stage.alignH = Stage.ALIGN_CENTER;
            }else if(screenRatio <= 16/9){
                Laya.init(0, 1334,WebGL);
//fixedheight:按屏幕寬高等比縮放,高度不變,寬度適配(設計高度*屏幕寬高比),寬度超出會裁切
                Laya.stage.scaleMode = Stage.SCALE_FIXED_HEIGHT;
            }else if(screenRatio <= 18/9){
                Laya.init(750, 750 * screenRatio,WebGL);
//等比縮放,按屏幕寬高與設計比例最小比率等比縮放,可能會黑邊
                Laya.stage.scaleMode = Stage.SCALE_SHOWALL;
                Laya.stage.alignV = Stage.ALIGN_BOTTOM;
            }
            //大于18/9的認為是特別高的屏幕,iphoneX
            else{//判斷為有劉海的屏幕(iponeX)
                GlobalData.hasBang = true;
                Laya.init(750, 1624, WebGL);
                Laya.stage.scaleMode = Stage.SCALE_FIXED_WIDTH;
                Laya.stage.alignH = Stage.ALIGN_CENTER;
                Laya.stage.alignV = Stage.ALIGN_MIDDLE;
            }
        }

其他引擎的參考方案

  • 白鷺的適配方案:noscale,exactfit,showall,noborder
  • cocos的策略:適配高度或寬度或根據(jù)寬高比自動選擇,裁剪背景圖,避免黑邊或空白,設置子UI元素自動對齊到可見區(qū)域
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容