Ich habe diesen Code, um eine Sinuswelle auf dem Bildschirm zu zeichnen, aber aus irgendeinem Grund kommt nichts auf der Leinwand. Es ist durchaus möglich, dass es überhaupt nichts mit requestAnimFrame zu tun hat, aber ich glaube, dass dies das Problem ist. Die var y
in der Zeichenfunktion sollte nur eine einfache Sinusfunktion von Asin sein (kx - omega * t), wobei k die Wellenzahl ist, die = 2pi/Wellenlänge.requestAnimationFrame keine Zeichnung auf Leinwand
Javascript:
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
var cx = 0,
t = 0,
Amp1 = 200,
Wav1 = 100,
omega = 0.01;
function draw(x, t) {
var y = Amp1 * Math.sin(x(2 * Math.PI/Wav1) - omega * t) + 999;
ctx.beginPath();
ctx.moveTo(t + 100, y);
ctx.lineTo(t + 100, y + 1);
ctx.stroke();
ctx.closePath();
}
window.requestAnimFrame = (function (callback) {
return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (callback) {
window.setTimeout(callback, 100);
};
}());
function animate() {
setInterval(function() {
window.requestAnimFrame(animate);
var newX = cx,
newT = t;
cx += 0.5;
t += 0.5;
draw(newX, newT);
}, 50);
}
animate();
EDIT: Nicht wirklich sicher, warum Amp1
und Wav1
anstehen Cyan?
Dank für das Clearing, dass bis: p Der einzige Grund, warum ich 999 wurde die Zugabe war es zu verschieben, um die Leinwand nach unten, so dass es nicht Bildschirm ausgeblendet hat. Vielleicht bin ich mit der Verschiebung ein wenig über Bord gegangen. Hoppla. – CooperCape
Anmerkung: Ich habe hier auch einen Operator '*' hinzugefügt: 'x * (2 * Math.PI/Wav1)', weil Sie versucht haben, x als Funktion zu verwenden, aber ich habe einen Tippfehler angenommen. –
Ahhh das war wahrscheinlich, warum es nicht funktionierte. Kein Tippfehler, nur eine schlechte Annahme dass 'x() = x *()'. Zumindest weiß ich es für zukünftige Referenz. – CooperCape