@iliareznik
Начинающий

Как анимировать несколько объектов?

Как добавить еще 10 мячей и анимировать их?
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Прыгающий мяч</title>
</head>
<body>
	<canvas id="canvas" width="200" height="200"></canvas>
	<script type="text/javascript">
		var Ball = function () {
			this.x = 100;
			this.y = 100;
			this.xSpeed = -2;
			this.ySpeed = 3;
		};

		var circle = function (x, y, radius, fillCircle) {
			ctx.beginPath();
			ctx.arc(x, y, radius, 0, Math.PI * 2, false);
			if (fillCircle) {
				ctx.fill();
			} else {
				ctx.stroke();
			}
		};
		Ball.prototype.draw = function() {
			circle(this.x, this.y, 3, true);
		};

		Ball.prototype.move = function() {
			this.x += this.xSpeed;
			this.y += this.ySpeed;
		};

		Ball.prototype.checkCollision = function() {
			if (this.x < 0 || this.x > 200) {
				this.xSpeed = -this.xSpeed;
			}
			if (this.y < 0 || this.y > 200) {
				this.ySpeed = -this.ySpeed;
			}
		};

		var canvas = document.getElementById('canvas');
		var ctx = canvas.getContext('2d');

		var ball = new Ball;

		setInterval(function () {
			ctx.clearRect(0, 0, 200, 200);

			ball.draw();
			ball.move();
			ball.checkCollision();

			ctx.strokeRect(0, 0, 200, 200)
		}, 10);
	</script>
</body>
</html>
  • Вопрос задан
  • 429 просмотров
Решения вопроса 1
twobomb
@twobomb
Никогда не ставь gameLoop функцию на setInterval!Потому-что если будут какие-то сложные вычисления физики допустим, подвисания, то она вызовется пока еще не завершилась прошлая, только setTimeout или requestAnimationFrame.
Вот держи. Еще я поправил collision, так как ты не учитываешь размеры самого шара. И еще рекомендую избаваться от xSpeed,ySpeed. Добавить одну speed и angle(в радианах) и двигать x+= speed * Math.sin(angle), y+= speed * Math.cos(angle). А ну и конечно сделай колизиция шар с шаром
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Добавлять в рендер, в цикле еще несколько Ball объектов
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы