Skip to content

Décors de scène ​

Décors de fond montés directement dans le onEnter d'une scène, nettoyés automatiquement sur onExit.

Comment ça fonctionne ​

useHTML() utilise onCleanup() en interne, qui s'accroche au système de cleanup-context de Gwen. Lorsque le router de scène enveloppe onEnter dans withCleanup(), tout handle alloué lors de l'entrée est automatiquement démonté sur onExit — aucun nettoyage manuel nécessaire.

Configuration ​

ts
// gwen.config.ts
['@gwenjs/renderer-html', {
  layers: {
    background: { order: 0, coordinate: 'screen' },
    hud:        { order: 100 },
  },
}]

Scène ​

ts
import { defineScene } from '@gwenjs/core'
import { useHTML } from '@gwenjs/renderer-html'

export const ForestScene = defineScene({
  name: 'Forest',
  systems: [TreeSystem, AmbientSystem],

  async onEnter() {
    const sky = useHTML('background', 'forest-sky')
    sky.mount(`
      <div class="forest-bg">
        <div class="sky"></div>
        <div class="clouds"></div>
        <div class="treeline"></div>
      </div>
    `)
    // sky.unmount() est enregistré automatiquement — pas de cleanup dans onExit
  },
})

CSS ​

css
.forest-bg {
  position: absolute;
  inset: 0;
  overflow: hidden;
}

.sky {
  position: absolute;
  inset: 0;
  background: linear-gradient(to bottom, #87ceeb, #c9e8f5);
}

.clouds {
  position: absolute;
  inset: 0;
  background: url('/assets/clouds.png') repeat-x center 20%;
  animation: drift 60s linear infinite;
}

.treeline {
  position: absolute;
  bottom: 0;
  width: 100%;
  height: 40%;
  background: url('/assets/treeline.png') repeat-x bottom;
}

@keyframes drift {
  from { background-position-x: 0; }
  to   { background-position-x: 100vw; }
}

Comparaison avec un acteur ​

onEnter de scèneActeur dédié
NettoyageAutomatique à la sortie de scèneAutomatique à la destruction de l'acteur
Entité ECSAucuneUne entité par instance d'acteur
Idéal pourDécors statiques de scèneÉléments dynamiques / par entité