feat(session-4): module Pa touché et scène arcade Ranmasé en Phaser 4
Pa touché est une consultation, pas un mode de jeu : cinq plantes triées par gravité, dépliables, sans chrono, sans score, sans épreuve. Le module affiche lui-même qu'il n'a pas encore été relu par une personne compétente et dit que cette relecture est la contribution la plus utile au projet. Ranmasé : import dynamique, game.destroy(true) au démontage, communication par événements — la scène ne touche aucun état Svelte et n'émet que sur changement, jamais par frame. Miroir DOM sémantique, canvas aria-hidden, jouable au clavier. Écran de chargement designé. Game design guidé par la pédagogie : laisser passer une plante dangereuse ne coûte rien (c'est le bon geste), ramasser le mauvais fruit coûte 2 points et pas une vie (il n'y a pas d'erreur à cueillir), une plante dangereuse sur cinq. Budgets mesurés et consignés dans l'ADR 0002 - shell hors Phaser : 78 Ko gzip (budget 170) - Phaser seul : 348 Ko gzip, sous le seuil de réexamen de 450 - absent du chemin critique de l'accueil, vérifié sur le HTML prérendu - build total 1,4 Mo Une prescription de l'ADR 0002 était fausse : l'option `resolution` n'existe pas dans Phaser 4 (pixelRatio y est en lecture seule). Le plafonnement passe par un tampon de rendu fixe 480×640 étiré en CSS — plafond dur plutôt que relatif. L'ADR est corrigé, pas contourné. Reste non mesuré : les 30 fps sur Mali-G52, qui demandent un appareil réel. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -48,12 +48,29 @@ au budget JS, borné par quatre conditions :
|
||||
|
||||
### Mesures — à compléter en session 4
|
||||
|
||||
| Mesure | Cible | Relevé |
|
||||
| Mesure | Cible | Relevé (2026-07-27) |
|
||||
|---|---|---|
|
||||
| Shell JS initial (gzip) | ≤ 170 Ko | _à mesurer_ |
|
||||
| Bundle Phaser seul (gzip) | information | _à mesurer_ |
|
||||
| fps scène Ranmasé sur Mali-G52 | ≥ 30 stables | _à mesurer_ |
|
||||
| Poids total de l'accueil | ≤ 2 Mo | _à mesurer_ |
|
||||
| Shell JS initial, Phaser exclu (gzip) | ≤ 170 Ko | **78 Ko** ✅ |
|
||||
| Bundle Phaser seul (gzip) | information | **348 Ko** — sous le seuil de réexamen de 450 Ko |
|
||||
| Phaser dans le chemin critique de l'accueil | absent | **absent**, vérifié sur le HTML prérendu ✅ |
|
||||
| Poids total du build | ≤ 2 Mo | **1,4 Mo** ✅ |
|
||||
| fps scène Ranmasé sur Mali-G52 | ≥ 30 stables | **non mesuré** — demande un appareil réel |
|
||||
|
||||
Le total JS du site atteint 426 Ko gzip, mais 348 Ko ne sont téléchargés qu'à l'entrée dans
|
||||
`/je/ranmase/`. Un visiteur de l'encyclopédie ne les voit jamais.
|
||||
|
||||
### Correction apportée à cet ADR par la mise en œuvre
|
||||
|
||||
Cet ADR prescrivait un « DPR plafonné à 1,5 » via l'option `resolution`. **Cette option
|
||||
n'existe pas dans Phaser 4** : `pixelRatio` y est une information matérielle en lecture
|
||||
seule, et `resolution` avait déjà été neutralisée en Phaser 3.
|
||||
|
||||
L'objectif est atteint autrement, et mieux : le tampon de rendu est fixé à **480 × 640**,
|
||||
étiré en CSS par le mode `FIT`. Le GPU dessine donc toujours 480 × 640 pixels, quel que
|
||||
soit le DPR de l'appareil — c'est-à-dire un plafond dur, là où `resolution` n'aurait donné
|
||||
qu'un plafond relatif.
|
||||
|
||||
`powerPreference: 'low-power'` existe bien, sous la clé `render`.
|
||||
|
||||
## Condition de réexamen
|
||||
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
# Session 4 — Ranmasé (Phaser 4) et Pa touché
|
||||
|
||||
**Date :** 2026-07-27
|
||||
|
||||
## Porte de sortie
|
||||
|
||||
| Critère | Cible | Mesuré |
|
||||
|---|---|---|
|
||||
| Phaser dans le bundle initial | absent | **absent** du HTML prérendu de l'accueil ✅ |
|
||||
| Shell JS initial, Phaser exclu | ≤ 170 Ko gzip | **78 Ko** ✅ |
|
||||
| Bundle Phaser mesuré et consigné | fait | **348 Ko gzip**, inscrit dans l'ADR 0002 ✅ |
|
||||
| Miroir DOM de la scène | navigable | liste textuelle de ce qui tombe, canvas `aria-hidden` ✅ |
|
||||
| Écran de chargement designé | présent | flag chip + « Chargement du jaden… » ✅ |
|
||||
| Module Pa touché | aucun chrono, aucun score, aucune épreuve | ✅ |
|
||||
| `npm run check` | 0/0 | **266 fichiers, 0/0** ✅ |
|
||||
| fps sur Mali-G52 | ≥ 30 stables | **non mesuré** — demande un appareil réel |
|
||||
|
||||
## Pa touché — une consultation, pas un mode de jeu
|
||||
|
||||
Cinq plantes, triées du plus grave au moins grave, chacune dépliable. Aucun chrono, aucun
|
||||
score, aucun classement, rien à débloquer. Le brief est catégorique et il a raison :
|
||||
transformer ces fiches en quiz d'adresse ferait d'une consigne de survie un jeu de
|
||||
rapidité.
|
||||
|
||||
Le module affiche lui-même qu'il **n'a pas encore été relu** par une personne compétente,
|
||||
et dit qu'une telle relecture est la contribution la plus utile que le projet puisse
|
||||
recevoir. C'est dans le produit, pas seulement dans un fichier de développeur.
|
||||
|
||||
## Ranmasé — l'îlot Phaser
|
||||
|
||||
Import dynamique depuis la route, `game.destroy(true)` au démontage, communication par
|
||||
**événements** — la scène ne lit ni n'écrit aucun état Svelte, et n'émet que lorsqu'une
|
||||
valeur change, jamais soixante fois par seconde.
|
||||
|
||||
Trois choix de game design qui viennent de la pédagogie, pas du gameplay :
|
||||
|
||||
- **Laisser passer une plante dangereuse ne coûte rien.** C'est le bon geste : le jeu ne
|
||||
peut pas récompenser le fait d'attraper ce qu'on doit éviter.
|
||||
- **Ramasser le mauvais fruit coûte 2 points, pas une vie.** Il n'y a pas d'erreur à
|
||||
cueillir un fruit comestible ; il y a juste une consigne à mieux lire.
|
||||
- **Une plante dangereuse sur cinq.** Présente, jamais dominante.
|
||||
|
||||
Aucun asset externe : les objets sont des primitives graphiques dans la palette de la
|
||||
charte. Embarquer des textures avant que le pipeline n'ait produit quoi que ce soit de
|
||||
validé aurait été mettre la charrue avant les bœufs.
|
||||
|
||||
### Une prescription de l'ADR 0002 qui était fausse
|
||||
|
||||
L'ADR demandait un « DPR plafonné à 1,5 » via l'option `resolution`. **Elle n'existe pas
|
||||
dans Phaser 4.** Corrigé et documenté : le tampon de rendu est fixé à 480 × 640 et étiré
|
||||
en CSS par le mode `FIT`, ce qui donne un plafond dur là où `resolution` n'aurait donné
|
||||
qu'un plafond relatif. L'ADR a été mis à jour plutôt que contourné.
|
||||
Reference in New Issue
Block a user