Estoy tratando de cargar activos de imagen para PIXI.js en un proyecto mío de React que usa Webpack. Aquí está toda mi clase de componente 'Menú':
import React from 'react';
import styles from './Menu.css';
import backgroundUrl from './background.jpg';
require('pixi.js')
class Menu extends React.Component {
componentDidMount () {
// Get reference to canvas element
this.canvas = this.refs.canvas;
// Load assets
PIXI.loader.add([
{
name: 'background',
url: backgroundUrl
}
]).load(this.init());
}
init () {
// Create background sprite
const background = new PIXI.Sprite(PIXI.loader.resources.background.texture);
// DEBUG: Height and width is always '1'
console.log('Background width: ' + background.width);
console.log('Background height: ' + background.height);
// Setup renderer
this.renderer = PIXI.autoDetectRenderer(background.width, background.height);
this.renderer.autoResize = true;
this.renderer.resize(window.innerWidth, window.innerHeight);
this.canvas.appendChild(this.renderer.view);
// Create stage
this.stage = new PIXI.Container();
// Add background to stage
this.stage.addChild(background)
// Tell the renderer to render the stage
this.renderer.render(this.stage);
}
render () {
return (
<div className={styles.canvas} ref='canvas'></div>
);
}
}
export default Menu;
Ahora, como puede ver, estoy intentando cargar la imagen background.jpg
en PIXI con la función loader.add()
. Simplemente no funciona. En los registros de mi consola de depuración puedo ver que la altura y el ancho de la imagen es 1. Además, cuando veo la URL de la imagen de fondo, todo parece estar bien. ¿Algun consejo?
Intente cambiarlo a esto;
~.load (() => this.init ());~
@ staff0rd ¡ eso funciona muy bien! ¿¿Pero por qué??
load
espera una función como su parámetro, sin embargo, en realidad estaba llamando a init()
pasando así el resultado (void) a load
. Si init
no tiene referencias a this
en su interior, puede usar lo siguiente para pasar la función;
~.cargar (este.init);~
Observe la falta de paréntesis.
esto es obsoleto ahora ... y necesitamos una forma de cargar cualquier activo que estemos empaquetando con webpack
@hayesmaker funciona pero la textura está vacía por un tiempo. cuando está listo, se dispara correctamente.
@nitwhiz ¿ es por eso que inicialmente obtengo un ancho de 1px para todos los sprites?
¿Hay alguna manera de hacer que se active una devolución de llamada una vez que se carga un objeto?
Comentario más útil
esto es obsoleto ahora ... y necesitamos una forma de cargar cualquier activo que estemos empaquetando con webpack