Pixi.js: Objetos de visualización clasificables

Creado en 29 ago. 2013  ·  12Comentarios  ·  Fuente: pixijs/pixi.js

algunas veces necesitamos que ese objeto de visualización se represente en un orden determinado para preservar el índice z.

Sería bueno si pudiéramos tener una manera de elegir el orden de los elementos secundarios dibujados, incluso con un método de ordenación o permitiendo un método de lectura por separado para DisplayObjects individuales para que el desarrollador pueda construir su lista ordenada, iterar a través de objetos y representarlos. .

🤔 Question

Comentario más útil

var mapContainer = new PIXI.DisplayObjectContainer(),
    unitsContainer = new PIXI.DisplayObjectContainer(),
    menuContainer = new PIXI.DisplayObjectContainer();

mapContainer.zIndex = 5;
unitsContainer.zIndex = 10;
menuContainer.zIndex = 20;

/* adding children, no matter in which order */
stage.addChild(mapContainer);
stage.addChild(menuContainer);
stage.addChild(unitsContainer);

/* call this function whenever you added a new layer/container */
stage.updateLayersOrder = function () {
    stage.children.sort(function(a,b) {
        a.zIndex = a.zIndex || 0;
        b.zIndex = b.zIndex || 0;
        return b.zIndex - a.zIndex
    });
};

stage.updateLayersOrder();

Todos 12 comentarios

El orden de los objetos en la matriz children es el orden en que se renderizarán. Eso significa que el último de la matriz se mostrará "en la parte superior".

ahora me siento un poco tonto xD
al leer el código fuente, vi una lista vinculada en renderDisplayObject y pensé que la matriz stage.children se había ido en esta versión ...
no importa, está funcionando bien con stage.children sort :)

Por cierto, ¡las actuaciones de la 1.3.0 son simplemente increíbles! Estoy terminando un pequeño código para probar cosas de WebGL en cocoonjs

gracias :)

No hay problema, ¡me alegro de que PIXI esté funcionando para ti!

var mapContainer = new PIXI.DisplayObjectContainer(),
    unitsContainer = new PIXI.DisplayObjectContainer(),
    menuContainer = new PIXI.DisplayObjectContainer();

mapContainer.zIndex = 5;
unitsContainer.zIndex = 10;
menuContainer.zIndex = 20;

/* adding children, no matter in which order */
stage.addChild(mapContainer);
stage.addChild(menuContainer);
stage.addChild(unitsContainer);

/* call this function whenever you added a new layer/container */
stage.updateLayersOrder = function () {
    stage.children.sort(function(a,b) {
        a.zIndex = a.zIndex || 0;
        b.zIndex = b.zIndex || 0;
        return b.zIndex - a.zIndex
    });
};

stage.updateLayersOrder();

La matriz de niños es readonly

@glebmachine no significa que no puedas llamar a "ordenar"

@tengotengo ¡ Gracias! Tu solución es simple pero elegante.

¿ Es la solución de

@bluefeet Echa un vistazo a https://github.com/pixijs/pixi-display
Creo que te daría la funcionalidad que necesitas.

Si está buscando esta función en 2017; se ha implementado en Pixi como zOrder.

https://pixijs.github.io/examples/#/display/zorder.js

@loadedsith pixi-display se actualiza a la última versión, se reescribe en TS y habrá un parche enorme con muchos ejemplos esta semana.

Este hilo se ha bloqueado automáticamente ya que no ha habido ninguna actividad reciente después de que se cerró. Abra un nuevo problema para errores relacionados.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

gaccob picture gaccob  ·  3Comentarios

finscn picture finscn  ·  3Comentarios

samueller picture samueller  ·  3Comentarios

madroneropaulo picture madroneropaulo  ·  3Comentarios

softshape picture softshape  ·  3Comentarios