Skip to content

Display order #8

@markknol

Description

@markknol

Hi there,

I am writing this because I have a similar project, an ECS based on Flambe for my games (because Flambe indeed is nice and pragmatic 👍 ). I have a version for Pixi.js and Heaps. (btw its not opensource/online so cannot really show something)

I was wondering how this framework deals with display order.

What I did is maybe less generic as what you did, but I'm curious how you deal with the display list.

  • Keep most of Flambe which isn't specific for platform the same. Replace flambe's systems (stage/keyboard/etc..) with specialized systems for the platforms. It's not that nicely generic as you have (it more looks like wrecked Flambe 😋 ), but is still usable.
  • I've created a DisplayComponent. This replaces Sprite and friends. A DisplayComponent holds a container, which is native pixi/heaps Sprite. In onStart of DisplayComponent, I look in parents for DisplayComponent, and attach the container to the parent container. The root DisplayComponent is added to the stage. Doing this makes it automatically work.

The problems I deal with is;

  • If a new DisplayComponent is added to the parent tree after a DisplayComponent is attached to the displaylist, it's hard to put this new container in-between (or even know that this event happened without making it lookup everything every frame).
  • If an Entity is reparented (for example I put in same parent Entity to sort it/put it on top), its hard to keep the order of the displaylist the same as the Entity tree. I cannot use onAdded/onRemoved because its not guaranteed that it has full access parent Entity tree yet. I now have to call reparent() manually but this is not that nice.

I see that you have a similar DisplayComponent how it is attached to display list seems to be done differently.
How does GASM deal with native display list v.s. Entity tree and how responsive is it when reparenting happens?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions