Я пишу игру на холсте, которая включает в себя много спрайтов на холсте за один раз. В некоторых случаях спрайты не видны и для сохранения циклов рендеринга я не отрисовываю их на холсте, если игрок их не увидит. Это отлично работает для спрайтов, которые не вращаются, но как только они поворачиваются (особенно прямоугольники), я не могу более точно определить, все ли они на видимом холсте.Как вы определяете в JavaScript, если изображение находится за пределами видимого холста после его поворота?
Вот что я делал до сих пор, как часть моего основного рендеринга цикла:
if (image !== null) {
ctx.save();
ctx.translate(this.x, this.y);
ctx.rotate(this.rotation * Math.PI/180);
ctx.drawImage(image, 0,0, this.width, this.height);
ctx.restore();
}
Перед тем, как вынести спрайт, используя код выше, я определить, если она видна с помощью этого кода:
// Only draw sprite sthat are visible to the player.
if (sprite.x + boundingBox >= 0 && sprite.y + boundingBox >= 0 && sprite.x <= this.width && sprite.y <= this.height) {
sprite.draw(this.gameConsole.ctx);
}
Что происходит, когда я поворачиваю неравномерный спрайт, например, прямоугольник, ширина и высота больше не правильны, поскольку они предполагают, что они находятся в невращающемся состоянии. Как вы подходите к этой проблеме?
И вы, и Каспер были правы, но кажется, что ваш подход был быстрее (меньше вычислений), хотя я не знаю, означает ли это, что я потеряю точность в долгосрочной перспективе. – heavysixer
Я только предположил худший сценарий (когда спрайт повернут на 45 градусов) и применит это к каждому случаю. Поэтому иногда вы можете рисовать спрайты экрана, но только в нескольких случаях, и я предполагал, что в долгосрочной перспективе будут платить меньше вычислений. Каспарс ответ более точен. – Jan