Я пишу основанную на холсте игру, в которой одновременно задействовано множество спрайтов на холсте.В некоторых случаях спрайты не видны, и для сохранения циклов рендеринга я не рендую их на холст, если игрок их не увидит.Это прекрасно работает для спрайтов, которые не вращаются, но как только они поворачиваются (особенно прямоугольники), я больше не могу точно определить, находятся ли они все еще в пределах видимого холста.
Вот что я делаю в рамках моего основного цикла рендеринга:
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);
}
Что происходит, когда я поворачиваю неравномерный спрайт, например, прямоугольник, ширина и высота перестают быть правильными, потому что они предполагают, что они находятся в не повернутом состоянии.Как бы вы подошли к этой проблеме?