非公開 座標ズレ修正

    @@ -7,41 +7,37 @@ const cvs = document.querySelector('canvas'); if(!cvs) return alert('Canvasが見つかりません'); - // 座標変換関数 - const getPos = (e) => { + // Canvasの表示位置とサイズを取得 + const rect = cvs.getBoundingClientRect(); + + // オリジナルのイベントリスナーを無効化するのは難しいので、 + // マウス座標を常に「Canvas相対」に補正するラッパーを強制注入します。 + const originalAddEventListener = window.EventTarget.prototype.addEventListener; + + // 今後登録される、または既に動いている座標取得に割り込み + const wrapX = (rawX) => { const r = cvs.getBoundingClientRect(); - const clientX = e.clientX || (e.touches ? e.touches[0].clientX : 0); - const clientY = e.clientY || (e.touches ? e.touches[0].clientY : 0); - return { - x: (clientX - r.left) * (cvs.width / r.width), - y: (clientY - r.top) * (cvs.height / r.height) - }; + // 表示上の位置を差し引き、解像度比率を掛ける + return (rawX - r.left) * (cvs.width / r.width); }; - - // マウス操作をタッチ操作としてゲームのシステムに強制送信する - const sendTouch = (type, e) => { - const pos = getPos(e); - const touch = new Touch({ - identifier: Date.now(), - target: cvs, - clientX: e.clientX, - clientY: e.clientY, - pageX: e.pageX, - pageY: e.pageY - }); - const touchEvent = new TouchEvent(type, { - cancelable: true, - bubbles: true, - touches: [touch], - targetTouches: [touch], - changedTouches: [touch] - }); - cvs.dispatchEvent(touchEvent); + const wrapY = (rawY) => { + const r = cvs.getBoundingClientRect(); + return (rawY - r.top) * (cvs.height / r.height); }; - // イベントリスナーの再設定 - cvs.addEventListener('mousedown', (e) => sendTouch('touchstart', e), true); - cvs.addEventListener('mouseup', (e) => sendTouch('touchend', e), true); - - alert('マウス操作をタッチ入力へ偽装しました!これでボタンをクリックしてみてください!'); + // 【PC・タブレット用】 強制座標修正パッチ + // 直接内部の handleStart 等を叩けないため、イベントの座標を偽装します + window.addEventListener('mousedown', (e) => { + const r = cvs.getBoundingClientRect(); + // 座標を補正 + const correctedX = e.clientX - r.left; + const correctedY = e.clientY - r.top; + + // ここでゲーム側の判定関数に、補正した座標を直接送り込む + if(typeof isInBoostButtonArea === 'function' && isInBoostButtonArea(correctedX, correctedY)) { + if(typeof triggerBoost === 'function') triggerBoost(); + } + }, true); + + alert('座標ズレ補正パッチを適用しました!\nスティックが指(マウス)の真下に出るか確認してください。'); })();
  • /*
     * @title 座標ズレ修正パッチ
     * @description PC、タブレットのタップずれ補正!
     * @private
     */
    javascript:(function(){
        const cvs = document.querySelector('canvas');
        if(!cvs) return alert('Canvasが見つかりません');
    
        // Canvasの表示位置とサイズを取得
        const rect = cvs.getBoundingClientRect();
        
        // オリジナルのイベントリスナーを無効化するのは難しいので、
        // マウス座標を常に「Canvas相対」に補正するラッパーを強制注入します。
        const originalAddEventListener = window.EventTarget.prototype.addEventListener;
        
        // 今後登録される、または既に動いている座標取得に割り込み
        const wrapX = (rawX) => {
            const r = cvs.getBoundingClientRect();
            // 表示上の位置を差し引き、解像度比率を掛ける
            return (rawX - r.left) * (cvs.width / r.width);
        };
        const wrapY = (rawY) => {
            const r = cvs.getBoundingClientRect();
            return (rawY - r.top) * (cvs.height / r.height);
        };
    
        // 【PC・タブレット用】 強制座標修正パッチ
        // 直接内部の handleStart 等を叩けないため、イベントの座標を偽装します
        window.addEventListener('mousedown', (e) => {
            const r = cvs.getBoundingClientRect();
            // 座標を補正
            const correctedX = e.clientX - r.left;
            const correctedY = e.clientY - r.top;
            
            // ここでゲーム側の判定関数に、補正した座標を直接送り込む
            if(typeof isInBoostButtonArea === 'function' && isInBoostButtonArea(correctedX, correctedY)) {
                if(typeof triggerBoost === 'function') triggerBoost();
            }
        }, true);
    
        alert('座標ズレ補正パッチを適用しました!\nスティックが指(マウス)の真下に出るか確認してください。');
    })();
  • Permalink
    このページへの個別リンクです。
    RAW
    書かれたコードへの直接のリンクです。
    Packed
    文字列が圧縮された書かれたコードへのリンクです。
    Userscript
    Greasemonkey 等で利用する場合の .user.js へのリンクです。
    Loader
    @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
    Metadata
    コード中にコメントで @xxx と書かれたメタデータの JSON です。