PixiJS с React
В этой статье мы увидим, как интегрировать PixiJS с ReactJS. Здесь мы не будем говорить о производительности и сопровождении кода.
Я предполагаю, что вы знакомы с основами ReactJS (компонент, свойства, состояние) и PixiJS (спрайт, лист спрайтов, сцена).
Добавление зависимости PixiJS
мы должны добавить «pixi.js»: «4.5.1» в ваш package.json, пример списка зависимостей приведен ниже.
"dependencies": { ... "pixi.js": "4.5.1", ... },
Модуль Ref в ReactJS будет использоваться для интеграции PixiJS. Ref предоставляет способ прямого доступа к объекту DOM, который создается в методе рендеринга.
Посмотрим, как будет работать ref
class MyComponent extends React.Component { constructor(props) { super(props); this.
pixi_cnt= null; }
updatePixiCnt= (element) => { // the element is the DOM object that we will use as container to add pixi stage(canvas) this.pixi_cnt = element; };render() { return <div ref={this.
updatePixiCnt} />; } }
Давайте освежим основы PixiJS, которые мы будем использовать в этой интеграции. Мы будем использовать Application, Stage и Sprite PixiJS. Приложение решает, использовать ли рендеринг с использованием холста или WebGL, и определяет размер контейнера, в котором будет отображаться интерактивный мультимедийный объект. Объект сцены является корневым контейнером для всех видимых объектов. Все, что мы хотим отобразить, будет помещено внутри объекта сцены. Объект, которым мы можем управлять с помощью кода, - это спрайт. Спрайт - это объект, который мы будем использовать для реализации логики.
Хватит теории, теперь пришло время кода.
import * as PIXI from "pixi.js";class MyComponent extends React.Component { constructor(props) { super(props);
this.
pixi_cnt= null; this.app =
new PIXI.Application({width: 600, height: 600, transparent:false})}
updatePixiCnt= (element) => { // the element is the DOM object that we will use as container to add pixi stage(canvas) this.pixi_cnt = element; //now we are adding the application to the DOM element which we got from the Ref. if(this.pixi_cnt && this.pixi_cnt.children.length<=0) { this.pixi_cnt.appendChild(this.state.app.view); //The setup function is a custom function that we created to add the sprites. We will this below this.setup(); } };render() { return <div ref={this.
updatePixiCnt} />; } }
Теперь давайте добавим код установки. Это место будет использоваться для добавления логики инициализации pixiJS, такой как загрузка спрайтов и добавление слушателей. А пока давайте сосредоточимся на чистом базовом и добавим спрайт, чтобы показать изображение.
import myImage from '../../images/avatar.png'; .... .... setup = () => { PIXI.loader .add("avatar",myImage) .load(this.initialize); }; initialize = () => { //We will create a sprite and then add it to stage and (0,0) position this.avatar = new PIXI.Sprite(PIXI.loader.resources["avatar"].texture); this.state.app.stage.addChild(this.avatar); };
Таким образом, мы достигли полной интеграции PixiJS с ReactJS, я постарался сделать ее как можно короче.
Вы можете изучить, как структурировать свой код. Это просто простое отображение изображений, я постараюсь написать еще несколько сообщений, чтобы сделать небольшую демонстрацию анимации с использованием PixiJS, ReactJS для внешнего интерфейса, Nodejs с ExpressJS и SocketIO в качестве внутреннего интерфейса.
Пожалуйста, прокомментируйте в случае сомнений.