[英]Rotating and moving an image in a canvas element?
我想移動並旋轉元素中的球的圖像。 球為68x68,畫布為300x200。 球沿着x和y軸移動,當它撞到牆壁時翻轉它的x和y速度 - 所有這些都有效。 我只是無法想象如何在機芯頂部進行旋轉。
我的draw()函數,我每隔30ms通過window.setInterval調用,看起來像這樣:
var draw = function() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.save();
ctx.rotate(ball_radians);
ctx.drawImage(ball_img, x, y);
ctx.restore();
// calculate new x, y, and ball_radians
}
這使得球在屏幕上飛舞,顯然我做錯了。 我錯過了什么?
0,0
或 例如
ctx.save();
ctx.translate( canvasLocX, canvasLocY );
ctx.rotate( ballRotationInRadians );
ctx.drawImage( ball_img, -ballCenterX, -ballCenterY );
ctx.restore();
請注意,如果您需要絕對速度,而不是保存和恢復畫布(處理許多您沒有更改的屬性),您可以撤消您的工作:
ctx.translate( canvasLocX, canvasLocY );
ctx.rotate( ballRotationInRadians );
ctx.drawImage( ball_img, -ballCenterX, -ballCenterY );
ctx.rotate( -ballRotationInRadians );
ctx.translate( -canvasLocX, -canvasLocY );
之前的一些過早優化已經被別人盲目地鸚鵡學舌; 我沒有親自進行基准測試以驗證它是否正確。
編輯 :我在這里添加了一個模擬的工作示例: http : //phrogz.net/tmp/canvas_beachball.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.