Phase 7 : personnage animé par sprites (poses/images successives)
Ajoute une nouvelle action de flow "jouer_animation_sprite" qui joue une
séquence de PNG sur un élément image (cycle en boucle type marche, ou
une fois type saut) — réutilise target_element_id (déjà whitelisté) et
data_value en JSON {frames, fps, loop}, exactement le patron déjà établi
par "jouer_son" (Phase 6) et "alea" (Phase 2) : aucune nouvelle colonne,
aucune migration de schéma.
Ajoute une propriété d'élément "orientation" (Modifier un élément) pour
retourner un personnage en miroir (gauche/droite/bascule) sans nécessiter
une 2e feuille de sprites "vue de dos" — même patron que "surbrillance"/
"désactivé".
Étend aussi la Timeline d'animation existante (kind="sprite", aux côtés
de "animate_css"/"custom") pour qu'un personnage puisse animer tout seul
dès l'affichage de l'écran (ex. idle en boucle perpétuelle), pas
seulement en réaction à un événement — réutilise la colonne générique
custom_keyframes (JSON) et le réglage iteration_count déjà là pour la
boucle, aucune migration non plus. Les deux entrées (action de flow et
clip de timeline) partagent le même moteur côté client
(runSpriteAnimation()/activeSpriteAnimations dans static/js/play/
actions.js, indexé par nœud DOM plutôt que par id d'élément pour
supporter plusieurs instances d'un même écran-modèle animées
indépendamment).
Une bibliothèque de sprites Forge (2 personnages Kenney CC0, sous-
ensemble curé idle/marche/saut copié dans static/characters/) est
proposée dans l'éditeur, mais un créateur peut tout aussi bien utiliser
ses propres sprites uploadés (même route d'upload générique que le son
de la Phase 6).
Périmètre volontairement limité à ce qui a été demandé : pas d'avatar
modulable en couches (assemblage cheveux/haut/bas par le joueur),
écarté du plan initial à la demande de l'utilisateur.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
76331f9285
commit
d2c2f20b65
@@ -11,5 +11,6 @@ ACTION_TYPE_LABELS = {
|
||||
"declencher_evenement": "Déclencher un événement",
|
||||
"ajouter_ligne": "Ajouter une ligne à un objet",
|
||||
"jouer_son": "Jouer un son",
|
||||
"jouer_animation_sprite": "Jouer une animation de sprites",
|
||||
"rien": "Ne rien faire",
|
||||
}
|
||||
|
||||
@@ -39,6 +39,12 @@ ELEMENT_ACTION_PROPERTIES = [
|
||||
("pos_y", "Position verticale en % (absolue)"),
|
||||
("pos_x_relatif", "Déplacer horizontalement de... % (relatif)"),
|
||||
("pos_y_relatif", "Déplacer verticalement de... % (relatif)"),
|
||||
# Phase 7 (moteur) — personnage animé par sprites : quel sens regarde
|
||||
# l'élément (utile pour un personnage qui se déplace au clavier, voir
|
||||
# applyElementProperty() dans static/js/play/actions.js — retourne
|
||||
# l'élément en miroir plutôt que de nécessiter une 2e feuille de
|
||||
# sprites "vue de dos").
|
||||
("orientation", "Orientation — sens du personnage"),
|
||||
]
|
||||
ELEMENT_ACTION_PROPERTY_LABELS = dict(ELEMENT_ACTION_PROPERTIES)
|
||||
|
||||
@@ -55,3 +61,10 @@ ELEMENT_DESACTIVE_VALUES = [
|
||||
("toggle", "Basculer désactivé / réactivé"),
|
||||
]
|
||||
ELEMENT_DESACTIVE_LABELS = dict(ELEMENT_DESACTIVE_VALUES)
|
||||
|
||||
ELEMENT_ORIENTATION_VALUES = [
|
||||
("droite", "Faire face à droite"),
|
||||
("gauche", "Faire face à gauche"),
|
||||
("toggle", "Retourner (miroir)"),
|
||||
]
|
||||
ELEMENT_ORIENTATION_LABELS = dict(ELEMENT_ORIENTATION_VALUES)
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
# ---------- Bibliothèque de sprites bundlée avec Forge (Phase 7) ----------
|
||||
#
|
||||
# Sous-ensemble curé (idle/marche/saut, pas les packs complets HD/Parts/
|
||||
# Tilesheet/Vector — inutiles pour un jeu 2D web) des personnages "Toon
|
||||
# Characters" de Kenney (CC0, voir static/characters/LICENSE-kenney.txt),
|
||||
# copiés dans static/characters/<slug>/*.png. Un créateur qui veut ses
|
||||
# propres sprites n'utilise pas ce catalogue : il uploade ses images (voir
|
||||
# routes/uploads/upload_file.py) et colle leurs URLs directement dans la
|
||||
# même zone de frames — voir #nf-action-sprite-fields dans
|
||||
# screen_edit.html.
|
||||
SPRITE_LIBRARY = {
|
||||
"male-adventurer": {
|
||||
"label": "Aventurier",
|
||||
"animations": {
|
||||
"idle": ["/static/characters/male-adventurer/idle.png"],
|
||||
"marche": [f"/static/characters/male-adventurer/walk{i}.png" for i in range(8)],
|
||||
"saut": ["/static/characters/male-adventurer/jump.png"],
|
||||
},
|
||||
},
|
||||
"zombie": {
|
||||
"label": "Zombie",
|
||||
"animations": {
|
||||
"idle": ["/static/characters/zombie/idle.png"],
|
||||
"marche": [f"/static/characters/zombie/walk{i}.png" for i in range(8)],
|
||||
"saut": ["/static/characters/zombie/jump.png"],
|
||||
},
|
||||
},
|
||||
}
|
||||
Reference in New Issue
Block a user