通用游戏加速代码
// == 超级游戏加速器(前台+后台通用)==(function() { // ===================== 配置项 ===================== // 倍速控制:修改此数值调整游戏加速倍数(1=正常速度,>1=加速,<1=减速) const SPEED_MULTIP...
// == 超级游戏加速器(前台+后台通用)==
(function() {
// ===================== 配置项 =====================
// 倍速控制:修改此数值调整游戏加速倍数(1=正常速度,>1=加速,<1=减速)
const SPEED_MULTIPLIER = 10;
// ===================== 保存原始方法 =====================
// 保存原生performance.now方法(绑定原上下文)
const originalPerformanceNow = performance.now.bind(performance);
// 保存原生Date.now方法
const originalDateNow = Date.now;
// 保存原生动画帧相关方法
const originalRAF = window.requestAnimationFrame;
const originalCancelRAF = window.cancelAnimationFrame;
// ===================== 虚拟时间管理 =====================
// 初始化虚拟时间(以真实时间为基准)
let fakeTime = originalPerformanceNow();
// 记录上一次的真实时间,用于计算时间差
let lastRealTime = originalPerformanceNow();
// 动画帧ID计数器
let rafIdCounter = 0;
// 存储动画帧回调函数的映射表
const rafCallbacksMap = new Map();
// ===================== 1. 劫持performance.now() =====================
// 影响基于performance.now的时间计算(游戏常用)
performance.now = function() {
const currentRealTime = originalPerformanceNow();
// 按倍速更新虚拟时间
fakeTime += (currentRealTime - lastRealTime) * SPEED_MULTIPLIER;
lastRealTime = currentRealTime;
return fakeTime;
};
// ===================== 2. 劫持Date相关方法 =====================
// 劫持Date.now(),返回虚拟时间的毫秒数
Date.now = function() {
return Math.floor(fakeTime);
};
// 劫持Date构造函数,无参数时使用虚拟时间
const OriginalDate = Date;
window.Date = function(...args) {
return args.length === 0
? new OriginalDate(fakeTime)
: new OriginalDate(...args);
};
// 还原Date的原型链和静态方法,避免兼容问题
Object.setPrototypeOf(window.Date, OriginalDate);
['parse', 'UTC', 'prototype'].forEach(prop => {
window.Date[prop] = OriginalDate[prop];
});
// ===================== 3. 劫持requestAnimationFrame =====================
// 劫持动画帧请求,加速回调执行(游戏动画核心)
window.requestAnimationFrame = function(callback) {
const id = ++rafIdCounter;
rafCallbacksMap.set(id, callback);
// 用原始RAF执行,但传入虚拟时间戳
originalRAF.call(window, function(timestamp) {
if (rafCallbacksMap.has(id)) {
// 按倍速计算动画帧时间戳
const fakeTimestamp = fakeTime;
rafCallbacksMap.get(id)(fakeTimestamp);
}
});
return id;
};
// ===================== 4. 劫持cancelAnimationFrame =====================
// 劫持动画帧取消方法,保证能正确清理回调
window.cancelAnimationFrame = function(id) {
rafCallbacksMap.delete(id);
originalCancelRAF.call(window, id);
};
// ===================== 提示信息 =====================
console.log(`✅ 游戏加速器已启动,当前倍速:${SPEED_MULTIPLIER}x`);
})();
微信打赏支持
支付宝打赏支持