canvasのtransform(3)
3687 ワード
canvasのtransformの例:回転矩形
コードを貼り付けて、原理はこのようにして、しかし正直に言って、このコードは私はあまり理解していません(̄_̄||)objです.save()とobj.resatore()という場所で、どの大神が説明できるのか.
Document
window.onload = function () {
let c1 = document.getElementsByTagName('canvas')[0];
let gd = c1.getContext('2d');
function d2a(n) {//
return n * Math.PI / 180;
}
function a2d(n) {//
return n * 180 / Math.PI;
}
let r=0;
requestAnimationFrame(next);
function next() {
gd.clearRect(0, 0, c1.width, c1.height);
gd.save();//
gd.translate(500, 275);
gd.rotate(d2a(r++));
gd.strokeStyle='orange';
gd.strokeRect(-100, -75, 200, 150);
gd.restore();//
requestAnimationFrame(next);
}
}
次は、複数の長方形を回転させることができます.
Document
window.onload = function () {
let c1 = document.getElementsByTagName('canvas')[0];
let gd = c1.getContext('2d');
function d2a(n) {//
return n * Math.PI / 180;
}
function a2d(n) {//
return n * 180 / Math.PI;
}
let datas = [
{ x: 300, y: 300, w: 200, h: 100, s: 1 },
{ x: 200, y: 100, w: 100, h: 50, s: 1 },
{ x: 250, y: 50, w: 50, h: 100, s: 5 }
];// ,s speed,
requestAnimationFrame(next);
let r=0;
function next() {
gd.clearRect(0, 0, c1.width, c1.height);//
datas.forEach(data => {
gd.save();//
gd.translate(data.x, data.y);
gd.rotate(d2a(r++*data.s/10));//
gd.strokeStyle = 'orange';
gd.strokeRect(-data.w / 2, -data.h / 2, data.w, data.h);
gd.restore();//
});
requestAnimationFrame(next);
}
}