【发布时间】:2019-04-06 01:24:37
【问题描述】:
对 Canvas 非常陌生。我创建了一个对象“Triangle”,并想出了如何实例化它并让它沿 x 和 y 轴移动。我什至想出了如何添加交互性(鼠标悬停时,对象改变方向)。让我感动的是旋转。我已经尝试了一百万种方法,但就是不明白该怎么做。我设法让整个对象组看似在点 0、0 处旋转。我希望每个对象都在自己的轴上旋转。任何帮助,将不胜感激!
var canvas = document.querySelector('canvas');
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
var c = canvas.getContext('2d');
img = new Image();
var randomNumber = getRandomInt(2);
var imgArray = ["https://i.imgur.com/efLA0Or.jpg?1", "https://i.imgur.com/efLA0Or.jpg?1"];
img.src = imgArray[randomNumber];
function getRandomInt(max) {
return Math.floor(Math.random() * Math.floor(max));
}
var mouse = {
x: undefined,
y: undefined
}
window.addEventListener('mousemove',
function(event) {
mouse.x = event.x;
mouse.y = event.y;
})
function Circle(x, y, dx, dy, radius, rotation) {
this.x = x;
this.y = y;
this.dx = dx;
this.dy = dy;
this.radius = radius;
this.draw = function() {
c.drawImage(img, this.x, this.y, 100, 100);
}
this.update = function() {
c.rotate(rotation);
if (this.x + this.radius > innerWidth || this.x - this.radius < 0) {
this.dx = -this.dx;
}
if (this.y + this.radius > innerHeight || this.y - this.radius < 0) {
this.dy = -this.dy;
}
this.y += this.dy;
//interactivity
if (mouse.x - this.x < 100 && mouse.x - this.x > -100
&& mouse.y - this.y < 100 && mouse.y - this.y > -100
) {
this.dx = -dx * 2;
this.dy = -dy * 2;
}
this.draw();
}
}
var circleArray = [];
for (var i = 0; i < 100; i++) {
var x = Math.random() * (innerWidth - radius * 2) + radius;
var y = Math.random() * (innerHeight - radius * 2) + radius;
var dx = (Math.random() - 0.5) * 1;
var dy = (Math.random() - 0.5) * 1;
var radius=30;
var rotation = Math.PI/180;
circleArray.push(new Circle(x, y, dx, dy, radius, rotation));
}
function animate() {
requestAnimationFrame(animate);
c.clearRect(0, 0, innerWidth, innerHeight);
for (var i = 0; i < circleArray.length; i++){
circleArray[i].update();
}
}
animate();
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="canvas.css">
<script src="canvas.js"></script>
</head>
<body>
<div id="container">
<canvas></canvas>
<script src="canvas.js"></script>
</div>
</body>
</html>
【问题讨论】:
-
您的代码没有任何对象“三角形”...
标签: html animation canvas rotation