
烧脑王者 (UI全量修复版)
本方案由源码大陆提供:深度修正 Cocos2d-js 引擎在长轴手机上出现的返回按钮消失、UI 像素偏移等核心 Bug。
修复重点
像素校准
像素校准
核心引擎:Cocos2d-js
策略模式:FIXED_WIDTH 2.0
策略模式:FIXED_WIDTH 2.0
🛠️ 逻辑优化说明(站长亲测)
- 像素溢出处理: 该游戏在 18:9 或更长屏幕下,默认高度计算会溢出,导致顶部的“返回”或“关卡”按钮飞出可见区域。方案通过锁定
1334设计高度,强制将 UI 拉回有效视口。 - 强制策略注入: 方案不依赖引擎默认设置,而是通过注入
cc.ResolutionPolicy强制执行比例对齐,解决了部分安卓机型加载后 Canvas 自动回弹的顽疾。 - 启动顺序优化: 针对 Cocos2d-js 的异步加载特性,通过拦截
window.boot并在回调中执行定时器,确保所有 UI 组件实例化后再进行二次尺寸校正。 - 渲染性能保障: 采用了 CSS3 的
vh/vw与引擎内部适配双重锁定的逻辑,在不损耗 GPU 渲染性能的前提下,确保 100% 的显示完整度。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>源码大陆 | UI修复版</title>
<meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1, minimum-scale=1,maximum-scale=1,viewport-fit=cover"/>
<style>
html, body {
margin: 0 !important; padding: 0 !important;
width: 100%; height: 100%;
background-color: #000 !important;
overflow: hidden;
display: flex; justify-content: center; align-items: center;
}
#GameDiv {
position: relative;
width: 56.25vh !important;
height: 100vh !important;
max-width: 100vw;
max-height: 177.78vw;
overflow: hidden;
background: #000;
}
#GameCanvas {
width: 100% !important; height: 100% !important;
display: block;
}
#splash { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: #171717; z-index: 99; }
.progress-bar { position: absolute; left: 10%; top: 50%; width: 80%; height: 3px; border: 1px solid #444; border-radius: 5px; }
.progress-bar span { display: block; height: 100%; background-color: #34c0e2; }
</style>
<link rel="stylesheet" type="text/css" href="style-mobile.6e9cd.css"/>
</head>
<body>
<div id="GameDiv">
<canvas id="GameCanvas" oncontextmenu="event.preventDefault()" tabindex="0"></canvas>
<div id="splash">
<div class="progress-bar stripes"><span style="width: 0%"></span></div>
</div>
</div>
<script src="src/settings.0239a.js" charset="utf-8"></script>
<script src="main.9c579.js" charset="utf-8"></script>
<script type="text/javascript">
(function () {
var splash = document.getElementById('splash');
splash.style.display = 'block';
function fixUI() {
if (!window.cc || !cc.view) return;
var container = document.getElementById('GameDiv');
var w = container.clientWidth;
var h = container.clientHeight;
// 1. 物理框架同步
cc.view.setFrameSize(w, h);
// 2. 核心调整:使用 FIXED_WIDTH (2)
// 配合 1334 高度,这通常能兼容大部分 16:9 且留出顶部 UI 空间
cc.view.setDesignResolutionSize(720, 1334, 2);
// 3. 强制像素校准,确保返回按钮不会飞出屏幕
var policy = new cc.ResolutionPolicy(cc.ContainerStrategy.PROPORTION_TO_FRAME, cc.ContentStrategy.SHOW_ALL);
cc.view.setResolutionPolicy(policy);
if (cc.view._updateFrameSize) cc.view._updateFrameSize();
window.dispatchEvent(new Event('resize'));
}
function loadScript (moduleName, cb) {
var domScript = document.createElement('script');
domScript.async = true;
domScript.src = moduleName;
domScript.addEventListener('load', function () {
document.body.removeChild(domScript);
cb && cb();
}, false);
document.body.appendChild(domScript);
}
var debug = window._CCSettings.debug;
loadScript(debug ? 'cocos2d-js.js' : 'cocos2d-js-min.db139.js', function () {
var originalBoot = window.boot;
window.boot = function() {
if (originalBoot) originalBoot();
var count = 0;
var timer = setInterval(function() {
fixUI();
if (++count > 20) clearInterval(timer);
}, 500);
};
if (window.CC_PHYSICS_BUILTIN || window.CC_PHYSICS_CANNON) {
loadScript(debug ? 'physics.js' : 'physics-min.b6620.js', window.boot);
} else {
window.boot();
}
});
window.addEventListener('resize', fixUI);
})();
</script>
</body>
</html>
原创
温馨提示:
感谢阅读!本文由 源码大陆 原创分享。
如果教程对你有帮助,欢迎转发分享给更多朋友!转载请务必保留本文出处。
本文链接:
© 版权声明
© 版权声明:本站资源均由会员上传或网络收集,仅供游戏源码研究与技术学习,请于24小时内删除。如有侵权请联系 44416072@qq.com,详情请阅读:源码大陆免责协议。
THE END









暂无评论内容