您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Exibe um overlay com a previsão da trajetória da bola em Haxball, cobrindo qualquer sala.
当前为
// ==UserScript== // @name Previsão de Trajetória da Bola - Haxball Overlay // @namespace http://tampermonkey.net/ // @version 1.0 // @description Exibe um overlay com a previsão da trajetória da bola em Haxball, cobrindo qualquer sala. // @author SeuNome // @match https://www.haxball.com/play* // @grant none // ==/UserScript== (function() { 'use strict'; // Cria um canvas overlay e adiciona ao body let overlayCanvas = document.createElement("canvas"); overlayCanvas.style.position = "absolute"; overlayCanvas.style.top = "0"; overlayCanvas.style.left = "0"; overlayCanvas.style.width = "100%"; overlayCanvas.style.height = "100%"; overlayCanvas.style.zIndex = "9999"; overlayCanvas.style.pointerEvents = "none"; // Para que o overlay não capture cliques document.body.appendChild(overlayCanvas); // Ajusta o tamanho do canvas para a janela inteira function resizeCanvas() { overlayCanvas.width = window.innerWidth; overlayCanvas.height = window.innerHeight; } resizeCanvas(); window.addEventListener("resize", resizeCanvas); const ctx = overlayCanvas.getContext("2d"); // Função que simula a trajetória da bola com múltiplos reflexos // ballPos: posição inicial (em pixels) // ballSpeed: velocidade (em pixels/segundo) // arenaWidth, arenaHeight: dimensões da arena (em pixels) // simulationTime: tempo total para simulação (em segundos) // timeStep: intervalo de simulação (em segundos) function simulateTrajectory(ballPos, ballSpeed, arenaWidth, arenaHeight, simulationTime, timeStep) { let positions = []; // Copia dos valores iniciais let pos = { x: ballPos.x, y: ballPos.y }; let vel = { x: ballSpeed.x, y: ballSpeed.y }; // Define os limites da arena (supondo que (0,0) seja o canto superior esquerdo) const maxX = arenaWidth; const maxY = arenaHeight; const minX = 0; const minY = 0; // Simula enquanto o tempo acumulado for menor que simulationTime for (let t = 0; t < simulationTime; t += timeStep) { // Atualiza posição pos.x += vel.x * timeStep; pos.y += vel.y * timeStep; // Verifica colisão com paredes verticais (esquerda e direita) if (pos.x <= minX) { pos.x = minX; vel.x = -vel.x; } else if (pos.x >= maxX) { pos.x = maxX; vel.x = -vel.x; } // Verifica colisão com paredes horizontais (topo e fundo) if (pos.y <= minY) { pos.y = minY; vel.y = -vel.y; } else if (pos.y >= maxY) { pos.y = maxY; vel.y = -vel.y; } // Armazena a posição calculada positions.push({ x: pos.x, y: pos.y }); } return positions; } // Função para desenhar a trajetória sobre o canvas function drawTrajectory(ctx, positions) { if (positions.length === 0) return; ctx.strokeStyle = "yellow"; ctx.lineWidth = 3; ctx.beginPath(); ctx.moveTo(positions[0].x, positions[0].y); for (let i = 1; i < positions.length; i++) { ctx.lineTo(positions[i].x, positions[i].y); } ctx.stroke(); } // Função principal para atualizar o overlay e desenhar a previsão function updateOverlay() { // Limpa o canvas do overlay ctx.clearRect(0, 0, overlayCanvas.width, overlayCanvas.height); // Simulação: aqui usamos valores exemplo para posição e velocidade da bola // Para integrar com dados reais, substitua esses valores pelos obtidos do jogo // Exemplo: bola começa no centro do canvas com velocidade arbitrária const ballPos = { x: overlayCanvas.width / 2, y: overlayCanvas.height / 2 }; const ballSpeed = { x: 200, y: 150 }; // pixels/segundo (ajuste conforme necessário) // Parâmetros da simulação const simulationTime = 3; // simula 3 segundos const timeStep = 0.02; // intervalo de 20ms // Usando todo o overlay como "arena" const arenaWidth = overlayCanvas.width; const arenaHeight = overlayCanvas.height; // Calcula as posições simuladas const positions = simulateTrajectory(ballPos, ballSpeed, arenaWidth, arenaHeight, simulationTime, timeStep); // Desenha a trajetória prevista drawTrajectory(ctx, positions); requestAnimationFrame(updateOverlay); } // Inicia a atualização do overlay updateOverlay(); })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址