非公開 画面高画質化

    @@ -4,50 +4,37 @@ * @private */ javascript:(function(){ - const d=document, v=d.getElementById('gameCanvas'), g=d.getElementById('game-container'); - if(!v || !g) return; + const canvas = document.getElementById('gameCanvas'); + if(!canvas) return; + const ctx = canvas.getContext('2d'); + + /* 1. 解像度の倍率設定(2倍で十分クッキリします。3以上は超重負荷) */ + const dpr = 2; + + /* 2. 内部解像度を物理的に倍にする */ + /* 元のサイズを記録 */ + const rect = canvas.getBoundingClientRect(); + const oldW = canvas.width; + const oldH = canvas.height; + + /* キャンバスのドット数を増やす */ + canvas.width = oldW * dpr; + canvas.height = oldH * dpr; + + /* 3. 描画スケールを補正 */ + /* これをしないと、すべてのオブジェクトが画面の左上に小さく固まってしまいます */ + ctx.scale(dpr, dpr); + + /* 4. フォントの平滑化設定(さらにクッキリさせる) */ + ctx.imageSmoothingEnabled = false; + ctx.textBaseline = 'middle'; + + /* 5. ゲーム側の自動リサイズイベントを上書きして維持する */ + window.removeEventListener('resize', window.resize); + + /* 座標計算のズレを防ぐため、ゲーム内のグローバル変数も更新(あれば) */ + if(typeof width !== 'undefined') window.width = canvas.width / dpr; + if(typeof height !== 'undefined') window.height = canvas.height / dpr; - const dpr = 2.0; - - /* 1. Canvas(戦場)の高密度化 */ - if(!window._hiResApplied){ - const w = v.width, h = v.height; - v.width = w * dpr; - v.height = h * dpr; - v.style.width = w + 'px'; - v.style.height = h + 'px'; - v.getContext('2d').scale(dpr, dpr); - window._hiResApplied = true; - } - - /* 2. ブラウザの自動計算機能(margin: auto)を使って中央に寄せる */ - Object.assign(g.style, { - zoom: dpr, - transform: `scale(${1/dpr})`, - transformOrigin: 'top center', /* 起点を中央上に変更 */ - position: 'relative', /* absoluteから変更してmarginを有効化 */ - top: '0', - left: '0', - marginLeft: 'auto', - marginRight: 'auto', - width: v.style.width, /* 幅をCanvasと一致させて余白を計算させる */ - height: 'auto' - }); - - /* 全体背景を黒にして、ズレを目立たなくする */ - d.body.style.backgroundColor = '#000'; - d.body.style.margin = '0'; - d.body.style.overflowX = 'hidden'; - - const style = d.createElement('style'); - style.innerHTML = ` - #game-container * { - -webkit-font-smoothing: antialiased; - transform: translateZ(0); - backface-visibility: hidden; - } - `; - d.head.appendChild(style); - - alert('【真・中央寄せパッチ】\nブラウザの自動レイアウトで中央配置を最適化しました。'); + alert('【高解像度化パッチ】適用完了!\n内部解像度を' + dpr + '倍に引き上げました。\n文字のぼやけが解消されているはずです。'); })();
  • /*
     * @title 画面高画質化
     * @description ゲーム画面を高画質にし、PCなど大画面で遊んだ際のぼやけを小さくする
     * @private
     */
    javascript:(function(){
        const canvas = document.getElementById('gameCanvas');
        if(!canvas) return;
        const ctx = canvas.getContext('2d');
    
        /* 1. 解像度の倍率設定(2倍で十分クッキリします。3以上は超重負荷) */
        const dpr = 2; 
    
        /* 2. 内部解像度を物理的に倍にする */
        /* 元のサイズを記録 */
        const rect = canvas.getBoundingClientRect();
        const oldW = canvas.width;
        const oldH = canvas.height;
    
        /* キャンバスのドット数を増やす */
        canvas.width = oldW * dpr;
        canvas.height = oldH * dpr;
    
        /* 3. 描画スケールを補正 */
        /* これをしないと、すべてのオブジェクトが画面の左上に小さく固まってしまいます */
        ctx.scale(dpr, dpr);
    
        /* 4. フォントの平滑化設定(さらにクッキリさせる) */
        ctx.imageSmoothingEnabled = false; 
        ctx.textBaseline = 'middle';
    
        /* 5. ゲーム側の自動リサイズイベントを上書きして維持する */
        window.removeEventListener('resize', window.resize);
        
        /* 座標計算のズレを防ぐため、ゲーム内のグローバル変数も更新(あれば) */
        if(typeof width !== 'undefined') window.width = canvas.width / dpr;
        if(typeof height !== 'undefined') window.height = canvas.height / dpr;
    
        alert('【高解像度化パッチ】適用完了!\n内部解像度を' + dpr + '倍に引き上げました。\n文字のぼやけが解消されているはずです。');
    })();
  • Permalink
    このページへの個別リンクです。
    RAW
    書かれたコードへの直接のリンクです。
    Packed
    文字列が圧縮された書かれたコードへのリンクです。
    Userscript
    Greasemonkey 等で利用する場合の .user.js へのリンクです。
    Loader
    @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
    Metadata
    コード中にコメントで @xxx と書かれたメタデータの JSON です。