您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
为论坛添加很棒的乌龟雪。
// ==UserScript== // @license MIT // @name SCBOY乌龟雪插件 // @namespace https://gitee.com/rustyhare // @version 1.4.5 // @description 为论坛添加很棒的乌龟雪。 // @author RustyHare // @match *://www.scboy.cc/* // @grant none // ==/UserScript== window.normalTurtle=function(quantity){ //正常持续的乌龟 var normalTurtle=new Object(); normalTurtle.turtleList=[]; normalTurtle.quantity=quantity; var width=window.innerWidth; var height=window.innerHeight; for(var i=0;i<quantity;i++){ normalTurtle.turtleList.push(["🐢",Math.random()*width,Math.random()*height,0,9.8,Math.random()*0.75+0.75]); } normalTurtle.update=function(){ for(var i=0;i<normalTurtle.quantity;i++){ //"20px Arial" if(normalTurtle.turtleList[i][1] < -window.rcanvas.width*0.11 || normalTurtle.turtleList[i][1] > window.rcanvas.width*1.11 || normalTurtle.turtleList[i][2] > window.rcanvas.height+20){//如果在屏幕之外则重置该乌龟 var destination=Math.random(); if(destination<0.5){ normalTurtle.turtleList[i]=(["🐢",Math.random()*window.rcanvas.width,Math.random()*window.rcanvas.height/10-window.rcanvas.height/10,window.w.velX,9.8,Math.random()*0.75+0.75]); }else if(destination>=0.5 && destination<0.75){ normalTurtle.turtleList[i]=(["🐢",-window.rcanvas.width/10,Math.random()*window.rcanvas.height,window.w.velX,9.8,Math.random()*0.75+0.75]); }else{ normalTurtle.turtleList[i]=(["🐢",window.rcanvas.width*1.1,Math.random()*window.rcanvas.height,window.w.velX,9.8,Math.random()*0.75+0.75]); } } normalTurtle.turtleList[i][1]+=normalTurtle.turtleList[i][3]*(0.6+normalTurtle.turtleList[i][5]*0.5)/10; normalTurtle.turtleList[i][2]+=normalTurtle.turtleList[i][4]*normalTurtle.turtleList[i][5]/10; normalTurtle.turtleList[i][3]+=(window.w.velX-normalTurtle.turtleList[i][3])/100; normalTurtle.turtleList[i][4]+=(window.w.velY-normalTurtle.turtleList[i][4])/100; } } return normalTurtle; } window.singleUseTurtle=function(quantity,x,y){//🎉🦌🐢❄ //一次性使用的乌龟, var singleUseTurtle=new Object(); var charList=["🎉","🦌","🐢","❄","🎄","🐇","🕊","👠"]; singleUseTurtle.turtleList=[]; for(var i=0;i<quantity;i++){ singleUseTurtle.turtleList.push([charList[Math.floor(Math.random()*charList.length)],x+Math.random()*2-4,y+Math.random()*2+6,Math.random()*14-7,Math.random()*14-21,Math.random()*0.75+0.2]); //这段声明让这些乌龟变得集中在(x,y)附近,并且很小 } return singleUseTurtle; } window.wind=function(){ var wind=new Object(); wind.velX=0; wind.velY=9.8; wind.windVelX=0; wind.windVelY=0; wind.accuCF=0; wind.windChange=function(){ if(wind.accuCF>Math.random()*200000){ wind.windVelX=(Math.random()*40)-20; wind.windVelY=5+(Math.random()*6); wind.accuCF=0; //console.log("RustyHare::Wind change triggered"); }else{ wind.accuCF+=1; } wind.velX+=(wind.windVelX-wind.velX)/750; wind.velY+=(wind.windVelY-wind.velY)/750; } return wind; } //类(伪)注册(不可用)部分结束 //以下是动画更新方法 window.moveAllSingleUseTurtle=function(){ for(var j=0;j<window.singleUseList.length;j++){ if(window.singleUseList[j].turtleList.length==0){ window.singleUseList.splice(j,1); } } if(window.singleUseList.length>0){ for(var j=0;j<window.singleUseList.length;j++){ for(var i=0;i<window.singleUseList[j].turtleList.length;i++){ if(window.singleUseList[j].turtleList[i][1] < -window.rcanvas.width*0.11 || window.singleUseList[j].turtleList[i][1] > window.rcanvas.width*1.11 || window.singleUseList[j].turtleList[i][2] > window.rcanvas.height+20){ window.singleUseList[j].turtleList.splice(i,1); }else{ window.singleUseList[j].turtleList[i][1]+=window.singleUseList[j].turtleList[i][3]*(0.6+window.singleUseList[j].turtleList[i][5]*0.5)/10; window.singleUseList[j].turtleList[i][2]+=window.singleUseList[j].turtleList[i][4]*window.singleUseList[j].turtleList[i][5]/10; window.singleUseList[j].turtleList[i][3]+=(window.w.velX-window.singleUseList[j].turtleList[i][3])/200; window.singleUseList[j].turtleList[i][4]+=(window.w.velY*3-window.singleUseList[j].turtleList[i][4])/50; } } } } } window.canvasRefreshTurtle=function(){ window.rcanvas.width=window.rcanvas.width; window.ctx.globalAlpha=0.3; //以下是普通乌龟渲染 for(var i=0;i<window.nt.turtleList.length;i++){ //"20px Arial" window.ctx.font=((20*window.nt.turtleList[i][5]).toString()+"px Arial"); window.ctx.fillText(window.nt.turtleList[i][0],window.nt.turtleList[i][1],window.nt.turtleList[i][2]); } //普通乌龟渲染完毕。我的代码结构好混乱啊。一个本来单纯用来渲染的函数居然还要承受删改乌龟的职能。 //渲染一次性单位(不止于乌龟)开始 for(var j=0;j<window.singleUseList.length;j++){ for(var i=0;i<window.singleUseList[j].turtleList.length;i++){ window.ctx.font=((20*window.singleUseList[j].turtleList[i][5]).toString()+"px Arial"); window.ctx.fillText(window.singleUseList[j].turtleList[i][0],window.singleUseList[j].turtleList[i][1],window.singleUseList[j].turtleList[i][2]); } } //一次性渲染结束 } window.searchForRemoval=function(x,y){ for(var i=0;i<window.nt.quantity;i++){ } } //动画更新方法部分结束 //下面是页面元素设置部分 window.canvasInit=function(){ var mfr=document.getElementsByTagName("body"); var rcanvas=document.createElement("canvas"); rcanvas.id="RustyHareCanvas"; rcanvas.style.pointerEvents="none"; rcanvas.style.position="fixed"; rcanvas.style.zIndex=2147483647; rcanvas.style.marginTop="-8px"; rcanvas.style.marginLeft="-8px" mfr[0].appendChild(rcanvas); var rcanvas=document.getElementById("RustyHareCanvas"); rcanvas.width=body.scrollWidth+8; rcanvas.height=window.innerHeight+8; var ctx=rcanvas.getContext("2d"); ctx.globalAlpha=0.3; //现在它的大小正常了,图像不会被拉伸了 } window.windowEventsRegister=function(){ window.singleUseList=[]; window.onclick=function(e){//在点击的时候设置一套新的乌龟 window.searchForRemoval(e.x,e.y); window.singleUseList.push(window.singleUseTurtle(10,e.x,e.y)); window.onresize=function(){ window.rcanvas.width=body.scrollWidth+8; window.rcanvas.height=window.innerHeight+8; window.ctx.globalAlpha=0.3; //console.log("RustyHare::Resized"); } } } window.requestTurtle=function(){ window.canvasRefreshTurtle(); window.requestAnimationFrame(window.requestTurtle); }//哈哈!根本不是性能问题!但是优化还是得做~ window.requestFirework=function(){ window.canvasRefreshFirework(); window.requestAnimationFrame(window.requestFirework); } function RustyHareMain(){//在真正的插件中,它只会被执行一次。 console.log("SCBOY论坛增强效果启动\nby 罗斯贝尔野兔"); window.isTenthAnniversary=false;//是否启动庆祝效果?false为乌龟状态,true为庆祝状态。 window.canvasInit();//初始化canvas window.windowEventsRegister();//绑定事件 window.rcanvas=document.getElementById("RustyHareCanvas"); window.ctx=window.rcanvas.getContext("2d"); if(window.isTenthAnniversary==false){ window.nt=window.normalTurtle(33);//这个数字是乌龟数量。 window.w=window.wind();//初始化风向模拟 window.setInterval("window.w.windChange()",50)//定时风向模拟 window.setInterval("window.nt.update()",10)//定时刷新乌龟状态 window.setInterval("window.moveAllSingleUseTurtle()",10)//定时刷新一次性乌龟状态 window.requestAnimationFrame(window.requestTurtle)//提供源源不断的图像。一帧一帧的动画就由此产生。 }else{ console.log("RustyHare::Firework effect init") window.fireworkMaintenance=window.fireworkMain(); window.setInterval("window.fireworkMaintenance.update()",10); window.requestAnimationFrame(window.requestFirework); } } RustyHareMain() //🍼
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址