Kamel Ghabte · Cours · Gratuit

Narration interactive et branches

Structurer une narration non-linéaire avec des états et des transitions.

Le concept

La narration interactive remplace la linéarité par un graphe d'états. Chaque nœud est une scène, les arêtes sont des choix. On la modélise comme une machine à états finis (FSM). En design XR, les branches représentent des voies d'exploration de l'espace. Le défi : assurer que toutes les voies mènent à une résolution satisfaisante.

Le code

// Interactive narrative: FSM with choices
let state = 'intro';
const story = {
  intro: {text:'Vous entrez dans la médina.', choices:[{label:'Aller au souk',to:'souk'},{label:'Aller au hammam',to:'hammam'}]},
  souk: {text:'Le souk est animé. Vous trouvez un zelligeur.', choices:[{label:'Parler',to:'zelligeur'},{label:'Repartir',to:'intro'}]},
  hammam: {text:'Vapeur et silence. Une vieille dame vous sourit.', choices:[{label:'La saluer',to:'end'},{label:'Repartir',to:'intro'}]},
  zelligeur: {text:'Il vous montre comment coder un motif.', choices:[{label:'Fin',to:'end'}]},
  end: {text:'Vous repartez, quelque chose a changé.', choices:[]},
};
function setup() { createCanvas(400, 280); }
function draw() {
  background(11,15,20);
  let s = story[state];
  fill(200); textAlign(LEFT); textWrap(WORD);
  text(s.text, 20, 40, 360);
  s.choices.forEach((c,i) => {
    fill(mouseY>120+i*44&&mouseY<156+i*44 ? [55,227,195]:[100,150,140]);
    text('› '+c.label, 20, 140+i*44);
  });
}
function mousePressed() {
  story[state].choices.forEach((c,i) => { if(mouseY>120+i*44&&mouseY<156+i*44) state=c.to; });
}

Pour aller plus loin

Explorez les autres cours gratuits sur la page Ateliers.

Pratiquer, collaborer, déployer — en 15 min.

Réserver un appel →