Hallo Ich möchte diese Form um ihre Mitte drehen, wenn ich meine Maus bewege, aber derzeit rotiert sie (0, 0). Wie ändere ich meinen Code?Wie wird ein Canvas-Objekt nach dem Mausbewegungsereignis um sein Zentrum gedreht?
Quellcode (auch jsfiddle sehen):
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
class Circle {
constructor(options) {
this.cx = options.x;
this.cy = options.y;
this.radius = options.radius;
this.color = options.color;
this.angle = 0;
this.toAngle = this.angle;
this.binding();
}
binding() {
const self = this;
window.addEventListener('mousemove', (e) => {
self.update(e.clientX, e.clientY);
});
}
update(nx, ny) {
this.toAngle = Math.atan2(ny - this.cy, nx - this.cx);
}
render() {
ctx.clearRect(0,0,canvas.width,canvas.height);
ctx.save();
ctx.beginPath();
ctx.lineWidth = 1;
if (this.toAngle !== this.angle) {
ctx.rotate(this.toAngle - this.angle);
}
ctx.strokeStyle = this.color;
ctx.arc(this.cx, this.cy, this.radius, 0, Math.PI * 2);
ctx.stroke();
ctx.closePath();
ctx.beginPath();
ctx.fillStyle = 'black';
ctx.fillRect(this.cx - this.radius/4, this.cy - this.radius/4, 20, 20);
ctx.closePath();
ctx.restore();
}
}
var rotatingCircle = new Circle({
x: 150,
y: 100,
radius: 40,
color: 'black'
});
function animate() {
rotatingCircle.render();
requestAnimationFrame(animate);
}
animate();
Danke jetzt weiß ich, warum mein Versuch zu übersetzen hat nicht funktioniert. Ich habe vergessen, am Drehpunkt zu rendern. – newguy
Ihr Tipp sieht interessant aus. Aber ich konnte die Methodendefinition und Dokumentation von 'setTranslate()' nicht im Internet finden. Was bedeutet jeder Parameter? Wie finde ich Beispiele für diese Methode? – newguy
@newguy oops, mein Schlechter. Ich bin im Halbschlaf +, sollte natürlich Transform sein. Ich habe den Text von translate() geändert. Aktualisiert. – K3N