You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用JavaScript模拟全屏游戏中的点击与按键操作?

网页全屏游戏(如shellshock.io、narrow.one)的JavaScript模拟点击与按键操作实现

这类网页游戏通常基于Canvas渲染,依赖原生鼠标/键盘事件监听而非DOM元素点击事件,因此需要构造原生事件来模拟用户操作。以下是具体实现方法:

一、模拟点击操作

针对Canvas渲染的游戏,需要构造MouseEvent(或PointerEvent)来模拟完整的点击流程(按下→释放→点击):

// 获取游戏的Canvas元素(多数全屏游戏只有一个Canvas,可直接通过标签选择)
const gameCanvas = document.querySelector('canvas');

/**
 * 模拟指定坐标的点击操作
 * @param {number} x - 点击的X坐标(基于窗口客户端区域)
 * @param {number} y - 点击的Y坐标(基于窗口客户端区域)
 */
function simulateClick(x, y) {
    // 触发鼠标按下事件
    const mousedownEvent = new MouseEvent('mousedown', {
        clientX: x,
        clientY: y,
        bubbles: true,
        cancelable: true,
        view: window
    });
    gameCanvas.dispatchEvent(mousedownEvent);

    // 触发鼠标释放事件
    const mouseupEvent = new MouseEvent('mouseup', {
        clientX: x,
        clientY: y,
        bubbles: true,
        cancelable: true,
        view: window
    });
    gameCanvas.dispatchEvent(mouseupEvent);

    // 触发点击事件(部分游戏可能需要此步骤)
    const clickEvent = new MouseEvent('click', {
        clientX: x,
        clientY: y,
        bubbles: true,
        cancelable: true,
        view: window
    });
    gameCanvas.dispatchEvent(clickEvent);
}

// 调用示例:模拟屏幕中心点击
const centerX = window.innerWidth / 2;
const centerY = window.innerHeight / 2;
simulateClick(centerX, centerY);

注意:如果游戏监听的是pointerdown/pointerup事件,只需将上述代码中的MouseEvent替换为PointerEvent,参数保持一致即可。

二、模拟按键操作

通过构造KeyboardEvent模拟按键的按下与释放流程:

/**
 * 模拟指定按键的按下与释放
 * @param {string} keyCode - 按键的code值(如'KeyW'、'Space'、'Digit1')
 * @param {number} holdTime - 按键按住时长(毫秒,默认100ms)
 */
function simulateKey(keyCode, holdTime = 100) {
    // 触发按键按下事件
    const keydownEvent = new KeyboardEvent('keydown', {
        key: keyCode,
        code: keyCode,
        bubbles: true,
        cancelable: true,
        view: window
    });
    window.dispatchEvent(keydownEvent);

    // 延迟触发按键释放事件,模拟真实按键按住时长
    setTimeout(() => {
        const keyupEvent = new KeyboardEvent('keyup', {
            key: keyCode,
            code: keyCode,
            bubbles: true,
            cancelable: true,
            view: window
        });
        window.dispatchEvent(keyupEvent);
    }, holdTime);
}

// 调用示例:
simulateKey('KeyW'); // 模拟按下并释放W键
simulateKey('Space', 200); // 模拟按住空格键200毫秒后释放

注意:可以通过在浏览器控制台执行以下代码,获取目标按键的key和code值:

document.addEventListener('keydown', e => console.log(`key: ${e.key}, code: ${e.code}`));

关键限制与风险

  1. 事件可信度检测:浏览器会标记脚本构造的事件isTrusted属性为false,部分游戏的反作弊系统会通过此属性检测非人工操作,导致账号封禁。
  2. 用户脚本权限:直接在控制台运行的代码可能受浏览器安全策略限制,使用Tampermonkey、Violentmonkey等用户脚本管理器可提升兼容性,但仍无法规避所有反作弊检测。
  3. 全屏模式适配:游戏处于全屏状态时,坐标计算需基于全屏窗口的innerWidth/innerHeight,避免坐标偏移。

内容的提问来源于stack exchange,提问作者StarrySkies

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 08:25:28