Das ist mein Pseudo-Code:Verhindern, dass Elemente abrupt in die Leinwand springen?
when move button is pressed:
currentCirclePos = circleX;
moveTimer = setInterval(move, 10);
My Move-Funktion wie folgt aussieht:
var move = function() {
circleX += move a bit;
};
In einigen Fällen wird das Element nicht bewegen. Für jene Situationen habe ich den folgenden Code:
while(Math.abs(circleX - currentCirclePos) < some distance away){
drawCircle(circleX, circleY);
circleX += gradual shift;
}
Dadurch wird die Position meines Kreises nicht allmählich ändern, sondern zieht sie abrupt some distance away
. Ich verstehe nicht, warum das passiert. Könnte mir jemand helfen, das Problem zu debuggen? Lass mich wissen, wenn ich mehr Code posten muss.
Das ist mein requestAnimationFrame
Code:
requestAnimationFrame(animate);
function animate(){
ctx.clearRect(0,0,cw,ch);
ctx.rect(0, 0, cw, ch);
ctx.fillStyle = 'white';
ctx.fill();
drawCircle(circleX, circleY);
requestAnimationFrame(animate);
}
UPDATE: Die while-Schleife nicht in der Animationsfunktion war, aber jetzt ist es. Es machte jedoch keinen Unterschied.
Diese "while" -Schleife sieht aus, als könnte sie ein "springender" Bösewicht sein, aber ohne mehr Code ist es schwer zu sagen. Versuchen Sie, Ihren Kreis über einen bestimmten Zeitraum an einen bestimmten Ort zu verschieben? Wenn ja, verwenden Sie den Zeitstempel, der automatisch in den requestAnimationFrame-Callback eingegeben wird, um die verstrichene Zeit zu berechnen. Bewegen Sie Ihren Kreis von Start zu Ziel, basierend auf dem Prozentsatz der Zeit, die in der Dauer verstrichen ist: circleX = startingCircleX + (endingCircleX-startingCircleX) * elapsedTime/totalTimeDuration' – markE
@markE Ja, ich denke auch, dass der Sprung aufgrund der while-Schleife erfolgt aber ich habe den Zeichenkreiscode hinzugefügt, um sicherzustellen, dass er nach jedem Inkrement von 'circleX' neu gezeichnet wird. Ich kann das Element mit der obigen "while" -Schleife an die gewünschte Stelle verschieben. Mein Problem ist, dass der Kreis direkt am Punkt B gezogen wird, anstatt sich allmählich von Punkt A zu Punkt B zu bewegen. –
Hier ist ein [Q & A] (http://stackoverflow.com/questions/39172583/how-to-move-a- rectangle-to-xy-coordinates-in-js/39193754 # 39193754) zeigt, wie der Zeitstempel verwendet wird, um von A nach B zu ziehen. – markE