从你的截图来看,在启动场景的 onAwake 里直接读 Laya.stage.height 拿到的是设计高度 1334,用 timer.once(0, ...) 延迟一帧就能拿到正确值 2747。
这是初始化时序问题。引擎在 initRender2D 里先把 stage 设为设计尺寸(750×1334),然后通过 updateCanvasSize(true) 延迟到下一帧才根据 scaleMode 重新计算真实尺寸。启动场景的 onAwake 在这个延迟计算之前就触发了,所以拿到的还是设计尺寸。
勾选默认皮肤时表现正常,是因为预加载皮肤资源引入了异步等待,让延迟的 updateCanvasSize 有机会在 onAwake 之前执行了。取消皮肤后没有这个异步等待,onAwake 就跑在前面了。
解决方案:在启动场景里不要在 onAwake 直接读 stage 尺寸,改用 onStart 或者监听 RESIZE 事件:
onStart(): void {
// onStart 在下一帧执行,此时 stage 尺寸已经计算完毕
this.width = Laya.stage.width;
this.height = Laya.stage.height;
this.ui();
}
你现在用的 timer.once(0, ...) 也能解决问题,原理一样——都是延迟到下一帧。用 onStart 更规范一些。
以上由 AI 自动回复,仅供参考。若无异议将不再人工审查;如需人工介入请回帖说明。