Я пытаюсь загрузить несколько спрайтов и отобразить их в PIXI.js. Имена файлов содержатся в манифесте JSON, который я получаю, а затем передаю загрузчику. Несмотря на успешную загрузку (я вижу запросы, сделанные в инспекторе), они никогда не отображаются на этапе PIXI. Код содержится в двух файлах.
background.js:
import * as PIXI from 'pixi.js';
import axios from 'axios';
const loader = PIXI.Loader.shared;
const ticker = PIXI.Ticker.shared;
const paintMovingSprite = ({ resource, container, surfaceWidth, surfaceHeight }) => {
let texture = new PIXI.Sprite(resource.texture);
let ratio = (surfaceHeight / texture.height / 3) * Math.random();
texture.width = texture.width * ratio + 50;
texture.height = texture.height * ratio + 50;
texture.x = Math.random() * surfaceWidth - texture.width / 2;
texture.y = Math.random() * surfaceHeight - texture.height / 2;
return texture;
};
const renderBackground = ({ fileNames, surfaceWidth, surfaceHeight }) => {
return new Promise((resolve, reject) => {
const container = new PIXI.Container();
loader.add(fileNames).load((_, resources) => {
Object.keys(resources).forEach(resource => {
container.addChild(
paintMovingSprite({ resource, surfaceWidth, surfaceHeight })
);
});
const testG = new PIXI.Graphics();
testG.beginFill(0xFFFF00);
testG.lineStyle(5, 0xFF0000);
testG.drawRect(0, 0, 300, 200);
console.log(container);
container.addChild(testG);
return resolve(container);
});
});
};
export { renderBackground };
Интересно, что графическое изображение тестового прямоугольника успешно отрисовывается, и контейнер содержит все дочерние элементы, которые он должен (одинза изображение).
import * as PIXI from 'pixi.js';
import axios from 'axios';
import * as Menu from './menu.js';
import * as Background from './background.js';
PIXI.utils.sayHello();
const app = new PIXI.Application({
width: window.innerWidth,
height: window.innerHeight,
backgroundColor: 0xffffff,
autoResize: true,
});
document.body.appendChild(app.view);
/* config */
app.renderer.backgroundColor = 0x33ff3f;
app.stage.sortableChildren = true;
let fileNames = null;
const renderPage = () => {
axios.get('assets/asset-data.json').then((resp) => {
fileNames = resp.data['mix12'];
Background.renderBackground({
fileNames,
surfaceWidth: app.renderer.width,
surfaceHeight: app.renderer.height,
}).then(container => {
// container object here looks correct and contains all the children
app.stage.addChild(container);
});
});
};
renderPage();
Я новичок в фреймворке, поэтому, возможно, упускаю что-то элементарное.
Спасибо.