• Stars
    star
    220
  • Rank 174,686 (Top 4 %)
  • Language
    TypeScript
  • License
    MIT License
  • Created almost 8 years ago
  • Updated 10 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Separate the z-hierarchy of your scene tree from its canonical structure.

@pixi/layers - PixiJS Layers Kit

Build CI npm version

This package provides an extension to scene tree - layers. These layers allows you to change the rendering order of items in your scene without moving them around in your scene. It's like {@link PIXI.DisplayObject#zIndex zIndex}, but supercharged.

It has been ported to PixiJS 7 since @pixi/layers 2.0.0 (formerly pixi-layers).

Nothing will work if you dont create Stage and set it as root. Please do it or read full explanation.

Installation

npm install --save @pixi/layers

Examples

Usage

{@link Layer} extends {@link PIXI.Container}:

import { Layer } from '@pixi/layers';

const layer = new Layer();

A DisplayObject/Container can be rendered inside its layer instead of direct parent

bunnySprite.parentLayer = layer;

Layer can order elements inside of it, by zOrder increase

bunnySprite.zOrder = 2;
cloudSprite.zOrder = 1;
badCloudSprite.zOrder = 1.01;
layer.group.enableSort = true;

You can check which objects were picked up into layer

stage.updateStage();
console.log(layer._sortedChildren);

// Order of rendering: 
//   bunnySprite (index=1)
//   badCloudSprite (index=2, order=1)
//   cloudSprite (index=2, order=0)

{@link Group} sorts its items after emitting the {@link Group#sort} event for each item. You can intercept it and set the z-order on each item.

layer.group.on('sort', function onWillSort(sprite) {
    sprite.zOrder = sprite.y 
});

@pixi/layer applies a mixin on {@link PIXI.Renderer} so it calls "updateStage" automatically if you use a {@link Stage} for your scene's root, so you can check it after render too:

renderer.render(stage);
console.log(layer._sortedChildren);

When you move a character with attached sprites from different layers to a new stage, you have to change their layers.

Instead, you can create a new display Group:

const lightGroup = new Group();

bunnySprite.parentGroup = lightGroup;
const lightLayer = new Layer(lightGroup); // only one layer per stage can be bound to same group

Groups are working between different stages, so when you move bunny it will be rendered in its light layer.

Layer is representation of global Group in this particular stage.

Vanilla JS,

All PixiJS has a special bundle suited for vanilla JavaScript in the browser.
Navigate pixi-layers npm package, take dist/pixi-layers.js file.

<script src="./pixi.min.js"></script>
<script src="./pixi-layers.js"></script>
const layer = new PIXI.layers.Layer();

Usage with canvas and particles

Due to changes in PixiJS architecture that allowed to build custom bundles, certain operations has to be called from your bundle or from your app.

The important thing is to call it when you know that corresponding module is loaded. You can call it multiple times if you are not sure :) Welcome to es6 imports!

If you use @pixi/canvas-renderer

import { CanvasRenderer } from 'pixi.js-legacy';
import { applyCanvasMixin } from '@pixi/layers';

applyCanvasMixin(CanvasRenderer);

If you use @pixi/particles

import { ParticleContainer } from 'pixi.js';
import { applyCanvasMixin } from '@pixi/layers';

applyParticleMixin(ParticleContainer);

Advanced sorting

If you want sorting to affect children that have different parentLayer than their direct parent, please set the group sortPriority. For now, it has two values - 0 by default and 1 for special cases.

Look at Normals with sorting

Important notice about filters

If you add filters to layer, or use layer itself as a mask - it might not work!

The reason is that layer getBounds() does not take into account its active children.

If you use filters on layer, there are three ways:

  1. add a filterArea, its global screen rect for filters, layer.filterArea = renderer.screen.
  2. works with both: Add a child graphics rect of certain size with alpha=0
  3. if you know how to pixi: override calculateBounds that way it takes _activeChildren into account.

If you use layer as a stencil mask (render all graphics inside it, only ways 2 and 3 can work.

The legend

Stage is the city. Containers are buildings, simple sprites are people.

Layers are office buildings. Office for googlers, office for bakers, office for account workers.

Groups are occupation. If there's a googler, he's looking for google office in the same town.

In render stage, some people are going to their offices and arrange by z-order/z-index/their rank in corporation.

People who dont have occupation or office are working from home. And some people are actually living in offices, that happens ;)

We can combine multiple Stage's into each other, like downtown, and child suburbs.

In that case, people will look for offices in the same suburb, and if they dont find it, they'll go search one in the downtown.

The only problem with this legend is that "people" and "buildings" are actually the same ;) Whole building can be "home for googlers", but one person in it has its own occupation, he's from Yandex. It happens.

Pros

  1. compatible with other implementations: does not change "container.children" order
  2. faster than just sorting: if there are 1000 elements with the same z-index, you can create extra Layer for them, and they wont be compared with each other
  3. Compared to pixi-display it doesn't care about filters or masks, they just work. You can use them to add lighting effects to the stage.

Cons

  1. Interaction is different, there might be bugs. Performance of processInteractive() can drop a bit.
  2. Non-renderable elements are not interactable. Elements with alpha=0 are interactable but their children are not.
  3. Plugin does not support new @pixi/events package yet.

How to build

npm install
npm run build

More Repositories

1

pixijs

The HTML5 Creation Engine: Create beautiful digital content with the fastest, most flexible 2D WebGL renderer.
TypeScript
42,668
star
2

pixi-react

Write PIXI apps using React declarative style
JavaScript
2,167
star
3

filters

Collection of community-authored custom display filters for PixiJS
TypeScript
886
star
4

particle-emitter

A particle system for PixiJS
TypeScript
777
star
5

spine

Pixi.js plugin that enables Spine support.
TypeScript
538
star
6

examples

Rendering examples using PixiJS and related plugins
JavaScript
469
star
7

sound

WebAudio API playback library, with filters. Modern audio playback for modern browsers.
TypeScript
376
star
8

pixi-ui

Provide a definitive user experience in your PixiJS application without any frontend library!
JavaScript
299
star
9

tilemap

Rectangular tilemap implementation for PixiJS
TypeScript
275
star
10

pixi-typescript

Typescript definitions for Pixi.js
TypeScript
238
star
11

animate

PixiJS runtime library for content from Adobe Animate CC
JavaScript
198
star
12

lights

Adds dynamic lighting via deferred shading to PixiJS
TypeScript
191
star
13

open-games

TypeScript
190
star
14

pixi-projection

TypeScript
186
star
15

pixi-haxe

Externs of Pixi.js for Haxe
Haxe
179
star
16

graphics-smooth

Drop-in replacement for Graphics but with anti-aliasing
TypeScript
151
star
17

ui

Commonly used UI components for PixiJS
TypeScript
149
star
18

animate-extension

Custom Platform Plugin for Adobe Animate CC (Formerly Adobe Flash CC) - to export animation for the PixiJS renderer
C++
124
star
19

pixi-heaven

PIXI.js advanced color modes, sprites, meshes
TypeScript
115
star
20

pixi-compressed-textures

Compressed textures and retina support for pixijs. Loader can choose textures depends on platform and rendering mode.
TypeScript
92
star
21

pixi-native

A native version of pixi
Kotlin
85
star
22

pixi-gl-core

A set of tidy little pixi objects that make working with WebGL simpler
JavaScript
83
star
23

assetpack

TypeScript
77
star
24

pixi-extra-filters

[deprecated] Please see https://github.com/pixijs/pixi-filters
JavaScript
66
star
25

pixi-particles-editor

PIXI-based particle editor
JavaScript
65
star
26

picture

A plugin that includes a sprite renderer that reduces border artifacts and 3 blend mode implementations for WebGL
TypeScript
61
star
27

layout

Library for arranging/resizing pixiJS rendered elements basing on css like configs
TypeScript
53
star
28

html-text

Multi-Style Text Rendering Plugin for PixiJS
TypeScript
38
star
29

gif

Plugin to support playback of animated GIF images in PixiJS.
TypeScript
35
star
30

pixi-jsdoc-template

PixiJS Flavored JSDoc Template
JavaScript
30
star
31

extension-boilerplate

Pixi.js example renderer plugin. Clamps textures to reduce border artifacts.
TypeScript
30
star
32

pixijs.com

JavaScript
30
star
33

pixi-text-style

PIXI.TextStyle Generator
JavaScript
30
star
34

floss

Unit-testing for those hard to reach places
TypeScript
28
star
35

storybook

TypeScript
27
star
36

node

Run PixiJS but in Node.js environments, no browser required!
TypeScript
25
star
37

bunny-mark

Simulation for performance testing PIXI releases
JavaScript
20
star
38

devtools

TypeScript
18
star
39

batch

PixiJS batch rendering plugin library
TypeScript
17
star
40

pixify

Browserify bundle process for PIXI libraries
JavaScript
16
star
41

guides

PixiJS User Guides
SCSS
12
star
42

customize

Customize the list of packages to use for PixiJS v5
TypeScript
11
star
43

animate-examples

Document Examples for testing PixiAnimate publishing
10
star
44

docs

API Documentation container
HTML
9
star
45

examples-v4

Rendering examples using PixiJS v4 and related plugins
JavaScript
9
star
46

spine-v8

TypeScript
9
star
47

extension-scripts

Build-time scripts for setting up extensions
JavaScript
6
star
48

pixi-closure-compiler

closure compiler externs for pixijs
JavaScript
6
star
49

eslint-config

ESLint config for pixi.js plugin/integration libraries
JavaScript
5
star
50

webdoc-template

PixiJS template ported to webdoc
TypeScript
4
star
51

generator-pixi-plugin

A Yeoman generator for creating pixi.js plugins.
JavaScript
4
star
52

bundler

Bundle all release into a single package
JavaScript
3
star
53

pixi-animate-tests-tool

Used to generate unit tests solutions for PixiAnimate
JavaScript
3
star
54

legacy.pixijs.com

SCSS
3
star
55

examples-v5

Rendering examples using PixiJS and related plugins
JavaScript
2
star
56

webworker-plugins

TypeScript
1
star
57

examples-v7

JavaScript
1
star