Standardmäßig wird Text mit textAlign='start'
und textBaseline='alphabetic'
gezeichnet. So zeichnet fillText("g",20,50)
Ihr einzelnes Zeichen linksbündig (bei x = 20) und ermöglicht, dass Unterlängen von Zeichen unter y = 50 fallen.
Wenn Sie Ihren Text um einen bestimmten [x, y] zentriert zeichnen möchten, können Sie textAlign
und textBaseline
einstellen.
// text will be horizontally centered around the specified x in filltext
textAlign='center';
// text will be vertically centered around the specified y in filltext
textBaseline='middle';
Um ein Zeichen zu drehen:
context.translate
zum Zentrum x gewünscht, y.
context.rotate
in den gewünschten Winkel.
context.fillText(yourCharacter,0,0)
, um das Zeichen auf der Leinwand zu zeichnen. Sie zeichnen bei 0,0, weil Sie den Ursprung bereits mit dem Befehl context.translate
nach x, y verschoben haben.
Sie können requestAnimationFrame verwenden, um die Rotation Ihres Charakters zu animieren.
Setzen Sie den Code, der Ihr Zeichen in eine Funktion dreht: function rotateCharacter()
. Senden Sie die erforderlichen Argumente zum Zentrieren und Drehen des Zeichens: character
, centerX
, centerY
, radianAngle
.
Dann eine andere Funktion erstellen, die Ihren Charakter Rotation beseelt: function animate()
Innerhalb der Animationsfunktion:
- Klar die Leinwand:
context.clearRect
,
- Rufen Sie die Drehfunktion des gedrehten Charakter zu zeichnen,
- Aktualisiere den Rotationswinkel für den nächsten Animationsrahmen
- Fordern Sie, dass die Animation fortgesetzt wird e:
requestAnimationFrame
Hier ist Beispielcode und eine Demo:
// canvas vars
var canvas=document.getElementById("canvas");
var ctx=canvas.getContext("2d");
var cw=canvas.width;
var ch=canvas.height;
// set canvas text styling
ctx.font='30px verdana';
ctx.textAlign='center';
ctx.textBaseline='middle';
// character vars
var character='M';
var centerX=50;
var centerY=50;
var radianAngle=0;
// start animating
requestAnimationFrame(animate);
function rotateCharacter(text,centerX,centerY,radianAngle){
// translate to the centerpoint you desire to rotate around
ctx.translate(20,50);
// rotate by the desired angle
ctx.rotate(radianAngle);
// draw the text on the canvas
ctx.fillText('M',0,0);
// always clean up -- reset transformations to default
ctx.setTransform(1,0,0,1,0,0);
}
function animate(time){
// clear the canvas
ctx.clearRect(0,0,cw,ch);
// draw the character rotated & centered at centerX,centerY
rotateCharacter(character,centerX,centerY,radianAngle);
// update the rotation angle for next time
radianAngle+=Math.PI/45;
// request another animation frame
requestAnimationFrame(animate);
}
body{ background-color: ivory; }
#canvas{border:1px solid blue; margin:0 auto; }
<h4>A character rotating around a specified centerpoint</h4>
<canvas id="canvas" width=300 height=300></canvas>
Nun danke Ihnen für Ihre vollständige Antwort. Allerdings sehe ich wirklich nicht, wie ich deine Antwort auf meine Frage umsetzen soll. Ich glaube, ich verstehe nicht sehr gut Canvas, und ich möchte den Charakter rotieren kontinuierlich während der Übersetzung. Ich weiß einfach nicht, wie es geht, oder ob es überhaupt möglich ist. – Nuzzob
Ich habe meine Antwort aktualisiert, um zu zeigen, wie die Drehung eines Charakters um einen bestimmten Mittelpunkt animiert wird. Ich habe den Code in eine Funktion eingefügt, so dass Sie Plug-and-Play in Ihr Projekt einfügen können. Viel Glück mit Ihrem Projekt! – markE