LayaBox的移动端h5小游戏的横竖屏问题

针对单个游戏我们直接在初始化的时候修改Laya.stage.screenMode的值就可以了

Laya.stage.screenMode = "horizontal"//横屏
Laya.stage.screenMode = "vertical"//竖屏

如果想批量修改的话,首先我们需要重写库里的方法,这里封装了一个函数

const replaceProperty = (owner, properties) => {
        if (owner == null)
            return;
        properties.forEach((item) => {
            const target = item.target != null ? item.target : owner;
            const newName = item.newName != null ? item.newName : item.name;
            const sameTarget = target === owner;
            if (item.customFunction != null) {
                owner[item.name] = function () {
                    return item.customFunction.call(this, ...arguments);
                };
            }
            else if (item.customSetter != null || item.customGetter != null) {
                const hasSetter = item.customSetter != null;
                const hasGetter = item.customGetter != null;
                if (hasSetter && hasGetter) {
                    Object.defineProperty(owner, item.name, {
                        get() {
                            return item.customGetter.call(this);
                        },
                        set(v) {
                            item.customSetter.call(this, v);
                        },
                        enumerable: false,
                    });
                }
                else if (hasSetter) {
                    Object.defineProperty(owner, item.name, {
                        set(v) {
                            item.customSetter.call(this, v);
                        },
                        enumerable: false,
                    });
                }
                else if (hasGetter) {
                    Object.defineProperty(owner, item.name, {
                        get() {
                            return item.customGetter.call(this);
                        },
                        enumerable: false,
                    });
                }
            }
            else {
                Object.defineProperty(owner, item.name, {
                    get() {
                        return sameTarget ? this[newName] : target[newName];
                    },
                    set(v) {
                        if (sameTarget) {
                            this[newName] = v;
                        }
                        else {
                            target[newName] = v;
                        }
                    },
                    enumerable: false,
                });
            }
        });
    };

我们直接在进入游戏后去调用这个方法修改screenMode的值,就可以对游戏进行强制横屏了

replaceProperty(Laya.stage, [
        {
            name: 'screenMode',
            customGetter() {
                return "horizontal";//"vertical"
            },
            customSetter(value) {
                console.log("customSetter")
            },
        },
    ])

后面再考虑到手机翻转,再设置一个监听就可以了

window.addEventListener('orientationchange', function (event) {
    if (window.orientation == 180 || window.orientation == 0) {
        // alert("竖屏");    //竖屏事件处理
        Laya.stage.screenMode = "vertical";
        Laya.stage._changeCanvasSize();
    }
    if (window.orientation == 90 || window.orientation == -90) {
        // alert("横屏");    //横屏事件处理
        Laya.stage.screenMode = "horizontal";
        Laya.stage._changeCanvasSize();
    }
});

  • 19
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值