В PixiJS элемент <canvas> создается автоматически
при инициализации приложения через PIXI.Application.
Управление его размерами является фундаментальным для корректного
отображения графики на разных устройствах и экранах. Основной способ
задания размеров — это параметры width и
height при создании приложения:
const app = new PIXI.Application({
width: 800,
height: 600,
backgroundColor: 0x1099bb
});
document.body.appendChild(app.view);
Здесь app.view — это сам <canvas>,
который можно стилизовать через CSS для позиционирования, однако размеры
для рендеринга задаются через свойства приложения.
Для обеспечения корректного отображения на устройствах с разными
разрешениями важно учитывать соотношение сторон и
плотность пикселей (devicePixelRatio). PixiJS предоставляет
возможность динамически масштабировать сцену с помощью свойства
resolution:
const app = new PIXI.Application({
width: window.innerWidth,
height: window.innerHeight,
resolution: window.devicePixelRatio || 1,
autoDensity: true
});
autoDensity: true автоматически масштабирует
<canvas> под разрешение устройства.resolution определяет, сколько пикселей на единицу CSS.
При Retina-дисплеях window.devicePixelRatio может быть 2
или 3, что позволяет избежать размытия графики.Для адаптации к динамическим изменениям окна используют событие
resize и метод renderer.resize():
window.addEventListener('resize', () => {
app.renderer.resize(window.innerWidth, window.innerHeight);
// Дополнительно можно масштабировать контейнеры
app.stage.scale.set(window.innerWidth / 800, window.innerHeight / 600);
});
renderer.resize(width, height) изменяет размер canvas и
области рендеринга.stage.scale) сохраняет пропорции
объектов при изменении размеров.Можно использовать разные стратегии масштабирования:
Пример функции подгонки с сохранением пропорций:
function resize() {
const scale = Math.min(window.innerWidth / 800, window.innerHeight / 600);
app.stage.scale.set(scale);
app.renderer.resize(window.innerWidth, window.innerHeight);
}
window.addEventListener('resize', resize);
resize();
PixiJS использует сцену (stage) как контейнер верхнего
уровня. Для адаптивного отображения важно масштабировать не только
<canvas>, но и все вложенные контейнеры:
const gameContainer = new PIXI.Container();
app.stage.addChild(gameContainer);
gameContainer.scale.set(window.innerWidth / 800, window.innerHeight / 600);
Это особенно полезно для 2D-игр, где объекты должны оставаться пропорциональными при изменении экрана.
При увеличении resolution важно учитывать, что текстуры
должны быть качественными. PixiJS автоматически
масштабирует текстуры, но для оптимального качества лучше загружать их с
достаточным разрешением.
const texture = PIXI.Texture.from('sprite@2x.png');
const sprite = new PIXI.Sprite(texture);
sprite.scale.set(0.5); // если текстура в два раза больше
app.stage.addChild(sprite);
Использование текстур высокого разрешения предотвращает размытие на дисплеях с высокой плотностью пикселей.
<canvas> управляется через
width и height приложения и
renderer.resize().resolution и
autoDensity.resize и
масштабирование stage.fit,
fill, stretch.resolution.Эти принципы позволяют строить динамически адаптивные сцены и игры на PixiJS с корректным отображением на любых устройствах и разрешениях.