Corrige les animations figées et le reporting SCORM dans le paquet exporté
Build and deploy / test-python (push) Failing after 1m15s
Build and deploy / test-js (push) Successful in 51s
Build and deploy / build-and-push (push) Skipped
Build and deploy / deploy (push) Skipped

Deux bugs distincts détectés dans le paquet Web/SCORM :
- L'animation de marche du personnage dépend entièrement des touches
  clavier maintenues (heldKeys), qui ne sont alimentées que par des
  écouteurs keydown/keyup sur window. Un LMS comme SCORM Cloud charge
  index.html dans une iframe qui ne reçoit pas le focus clavier par
  défaut : aucune touche n'atteignait jamais window, donc le personnage
  ne bougeait/animait jamais. On force désormais le focus au chargement
  et on le reprend au premier clic dans le jeu.
- scorm-api.js (qui pousse score/statut au LMS) était bien copié dans
  le zip mais jamais référencé par un <script> dans index.html, car
  build_scorm_package.py ne passait pas scorm_api_wrapper_url au
  template — le reporting SCORM (Completion/Success/Score) ne
  fonctionnait donc jamais depuis un export.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
william
2026-09-03 18:23:17 +02:00
co-authored by Claude Sonnet 5
parent 413685e871
commit 00f7191a8b
2 changed files with 9 additions and 0 deletions
+1
View File
@@ -252,6 +252,7 @@ def build_scorm_zip(slug):
html = render_template(
"play.html", game=game, screens_data=payload["screens"], payload_json=json.dumps(payload),
offline_mode=True, asset_url=lambda filename: "static/" + filename,
scorm_api_wrapper_url="static/js/play/offline/scorm-api.js",
)
html = _relativize_absolute_urls(html, slug)
html = _inline_icon_urls(html, payload["icon_data_uris"])
+8
View File
@@ -189,6 +189,14 @@
// triggers.js. runScreenHeldKeyTriggers(), lui, est déjà appelé depuis
// showScreen() comme runScreenTimerTriggers().
bindHeldKeyTriggers();
// Le jeu exporté (SCORM) est souvent chargé dans une iframe par le LMS,
// qui ne reçoit pas le focus clavier automatiquement — sans focus, les
// événements keydown n'atteignent jamais window et le personnage ne
// bouge/anime jamais. On force le focus au chargement et on le
// reprend au premier clic dans le jeu.
window.focus();
document.body.tabIndex = -1;
document.body.addEventListener('click', function () { window.focus(); });
</script>
</body>
</html>