Для работы с PixiJS необходимо подключить библиотеку через npm или CDN. После подключения создается экземпляр приложения:
const app = new PIXI.Application({
width: 800,
height: 600,
backgroundColor: 0x1099bb,
});
document.body.appendChild(app.view);
PIXI.Application автоматически создает рендерер и сцену
(stage). Это базовая структура для добавления спрайтов,
текстур и контейнеров.
Текстурный атлас объединяет несколько изображений в один файл, а отдельные кадры описываются JSON-файлом с координатами.
PIXI.Loader.shared
.add('spritesheet', 'assets/spritesheet.json')
.load(setup);
Метод add принимает ключ и путь к JSON-файлу, который
содержит описание всех фреймов атласа.
Структура JSON текстурного атласа обычно включает:
frames – объект с названиями кадров и их координатами
(x, y, w, h) в
атласе.meta – информация о изображении атласа, масштабах и
формате.Пример фрагмента JSON:
{
"frames": {
"hero_idle_01.png": { "frame": { "x":0, "y":0, "w":64, "h":64 } },
"hero_idle_02.png": { "frame": { "x":64, "y":0, "w":64, "h":64 } }
},
"meta": {
"image": "spritesheet.png",
"size": { "w": 256, "h": 64 }
}
}
После загрузки атласа кадры становятся доступны через
PIXI.utils.TextureCache или через
PIXI.Texture.from.
function setup() {
const heroTexture = PIXI.Texture.from('hero_idle_01.png');
const heroSprite = new PIXI.Sprite(heroTexture);
heroSprite.x = app.screen.width / 2;
heroSprite.y = app.screen.height / 2;
heroSprite.anchor.set(0.5);
app.stage.addChild(heroSprite);
}
Ключевые моменты:
PIXI.Texture.from('frame_name') извлекает текстуру
кадра по имени.anchor.set(0.5) центрирует спрайт по середине
текстуры.x и y задаются относительно
сцены (stage).Если атлас содержит несколько кадров для анимации, можно создать
PIXI.AnimatedSprite.
function setup() {
const frames = [
PIXI.Texture.from('hero_idle_01.png'),
PIXI.Texture.from('hero_idle_02.png'),
PIXI.Texture.from('hero_idle_03.png')
];
const heroAnimation = new PIXI.AnimatedSprite(frames);
heroAnimation.animationSpeed = 0.1;
heroAnimation.play();
heroAnimation.x = app.screen.width / 2;
heroAnimation.y = app.screen.height / 2;
heroAnimation.anchor.set(0.5);
app.stage.addChild(heroAnimation);
}
Особенности AnimatedSprite:
animationSpeed – скорость воспроизведения кадров (0.1 =
10% от стандартной частоты).play(), stop(),
gotoAndStop(frameNumber) – управление
воспроизведением.tint, scale и
другими свойствами Sprite.Использование текстурного атласа значительно снижает количество загрузок и переключений текстур при рендеринге, что повышает производительность.
PIXI.Loader и
не создавать текстуры динамически в игровом цикле.PIXI.ParticleContainer.AnimatedSprite можно кешировать, если кадры
повторяются на разных объектах.Иногда требуется выделить кадр из текстурного атласа напрямую:
const sheetTexture = PIXI.Loader.shared.resources['spritesheet'].textures;
const customFrame = new PIXI.Sprite(sheetTexture['hero_idle_02.png']);
Такой подход полезен, когда нужно динамически выбирать кадр по имени или индексу, без создания отдельной анимации.
После добавления спрайта на сцену можно применять трансформации:
heroSprite.scale.set(2, 2); // увеличение в 2 раза
heroSprite.rotation = Math.PI / 4; // поворот на 45 градусов
heroSprite.alpha = 0.8; // прозрачность
Важное: Все трансформации применяются относительно
anchor. Если anchor не установлен, вращение и
масштаб будут происходить от верхнего левого угла.
Для группировки нескольких спрайтов используется
PIXI.Container:
const heroContainer = new PIXI.Container();
heroContainer.addChild(heroSprite);
heroContainer.addChild(heroShadow); // спрайт тени
heroContainer.x = 400;
heroContainer.y = 300;
app.stage.addChild(heroContainer);
Контейнеры позволяют перемещать, масштабировать и анимировать группу спрайтов как единое целое, упрощая организацию сцены.
Фильтры позволяют применять визуальные эффекты к спрайтам и контейнерам. Например:
const blurFilter = new PIXI.filters.BlurFilter();
heroSprite.filters = [blurFilter];
blurFilter.blur = 2;
Фильтры поддерживают размытие, цветокоррекцию, световые эффекты и могут применяться к отдельным спрайтам или к целым контейнерам.
Эти приемы создают прочную основу для работы с текстурными атласами в PixiJS, обеспечивая гибкость в отображении, анимации и оптимизации графики в проектах на JavaScript.