これは私が遭遇した奇妙なことの1つです。
基本的に、私のサイトにはたくさんの回転する形があります。回転する各シェイプは、最初に呼び出されたときにタイムアウトを設定して、スピンさせます。訪問者がWebページをクリックするたびに、これらの形状はクリアされ、ランダムに再度生成されます。
問題は、2回目のクリックで回転が少し速くなることです。3回目のクリックではさらに速く、4回目のクリックでは非常に速く回転するため、途切れ途切れになり、流動性がなくなります。
chrome:// flags FPSカウンターでサイトを見ると、60 fpsで始まり、4回目または5回目のクリックまでに、20〜50fpsにジャンプします。
コードの省略形は次のとおりです。
//creates timeout variable OUTSIDE the timeout function, so it can be cleared
var t;
var speedRandom;
function getRandSpeed(){
var randomSpeed = (Math.random()*.01);
if (randomSpeed<=.001){
randomSpeed=.001;
}else if(randomSpeed>=.005){
randomSpeed=.005;
}
console.log(randomSpeed);
if (rightSpin==0){
speedRandom=randomSpeed;
rightSpin=1;
}else{
speedRandom=-randomSpeed;
rightSpin=0;
}
}
objs[whichImg].speed = speedRandom;
function rotateDrawing(whichImg){
//This is the function that centers the object
centerImg(whichImg);
//translates the object to the centered point (different for each frame)
objs[whichImg].ctx.translate(objs[whichImg].centeredX,objs[whichImg].centeredY);
//rotates to the correct angle
objs[whichImg].ctx.rotate(objs[whichImg].angle);
//draws the image
objs[whichImg].ctx.drawImage(objs[whichImg].image,0,0,objs[whichImg].height,objs[whichImg].width);
//adds to the angle of the object
objs[whichImg].angle+=objs[whichImg].speed;
t=setTimeout(function(){rotateDrawing(whichImg)},40);
}
//THE ABOVE CODE WILL BE EXECUTED FOR EVERY SHAPE (TOTAL AROUND 5)
//this is what is called when the screen is clicked
function destroy(){
functionThatClearsAllTheImages();
clearTimeout(t);
rotateDrawing(whichImg);
}
このコードにはいくつかの穴があるかもしれませんが、機能します。問題は、5回目のクリック後に途切れるということです。
誰かがそれを必要とするならば、私はさらにコードを追加することができます、しかしどんな提案も非常に役に立ちます!