Files
2025-11-30 08:26:47 +08:00

213 lines
5.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: managing-sprites
description: Manages sprites, sprite sheets, sprite animations for arcade games (loading, rendering, collisions). Use when creating games or adding animated characters
allowed-tools: Read, Write, Grep, Glob, Bash
---
# Gestion des Sprites
Guide la gestion des sprites et sprite sheets pour les jeux arcade.
## Table des matières
- [Quand utiliser](#quand-utiliser)
- [Sprites dans le projet](#sprites-dans-le-projet)
- [Types de sprites](#types-de-sprites)
- [Concepts clés](#concepts-clés)
- [Classes et structures recommandées](#classes-et-structures-recommandées)
- [Optimisations](#optimisations)
- [Workflow de création sprite](#workflow-de-création-sprite)
- [Checklist sprite](#checklist-sprite)
- [En cas de doute](#en-cas-de-doute)
## Quand utiliser
- Ajout de nouveaux personnages/ennemis
- Création de sprite sheets
- Animations de sprites
- Détection de collisions
- Optimisation rendu sprites
## Sprites dans le projet
Trouve dans le code :
- Personnages joueurs
- Monstres et ennemis
- Power-ups et collectibles
- Sprite sheets existants
**Formats :**
- PNG avec transparence
- Sprite sheets (multiples frames)
- Résolutions multiples (@1x, @2x, @3x)
Examine le répertoire assets/sprites.
## Types de sprites
### 1. Sprite simple
Image statique, pas d'animation, position et taille fixes.
### 2. Sprite Sheet
**Multiple frames dans une image :**
- Layout horizontal (frames en ligne)
- Layout grille (frames en grille)
- Permet animations fluides
**Layouts courants :**
- Horizontal : 8 frames × 64px = 512×64px
- Grille 4×4 : 16 frames de 64×64px = 256×256px
- Par row : Chaque ligne = animation différente
Trouve les sprite sheets existants.
### 3. Sprite animé
**Animation frame par frame :**
- FPS configurable
- Boucle automatique
- Delta time pour smoothness
### 4. Sprite directionnel
**Différentes animations par direction :**
- Idle, Walk, Jump par direction
- Row dans sprite sheet par action
- State machine pour transitions
## Concepts clés
### Chargement d'images
**Asynchrone :**
- `Image.onload` pour savoir quand prêt
- Précharger avant utilisation
- Placeholder ou loading si nécessaire
Trouve comment le projet gère le chargement.
### Rendering
**Canvas drawImage() :**
- Source rectangle (quelle partie du sprite sheet)
- Destination rectangle (où dessiner)
- Scaling automatique si tailles différentes
Examine les fonctions de rendu dans les jeux.
### Collision Detection
**Techniques disponibles :**
- Bounding box (AABB) - Simple et rapide
- Collision circulaire - Pour objets ronds
- Pixel-perfect - Précis mais coûteux
- Hitbox personnalisée - Compromise
Trouve les fonctions de collision utilisées.
### Animation State Machine
**États et transitions :**
- IDLE → WALK → JUMP → FALL → IDLE
- Changement frame selon elapsed time
- Loop ou one-shot selon animation
Examine les state machines dans les jeux arcade.
## Classes et structures recommandées
Trouve dans le code :
- Classe Sprite de base
- Classe AnimatedSprite
- Manager de sprites (pool, loading)
- Helpers de collision
Examine l'architecture existante.
## Optimisations
### Performance
- **Sprite pooling** : Réutiliser instances au lieu de créer/détruire
- **Dirty flag** : Re-draw seulement si changement
- **Offscreen culling** : Pas de rendu si hors écran
- **Batch rendering** : Grouper draw calls
### Mémoire
- **Atlas textures** : Combiner sprites dans une texture
- **Lazy loading** : Charger sprites au besoin
- **Image scaling** : Charger résolution appropriée (@1x, @2x)
- **Cleanup** : Libérer sprites inutilisés
Cherche les optimisations déjà en place.
## Workflow de création sprite
### 1. Design sprite sheet
- Définir taille frame (64×64, 128×128, etc.)
- Organiser layout (horizontal, grille)
- Créer frames avec transparence PNG
### 2. Intégration code
- Charger sprite sheet
- Définir source rectangles par frame
- Setup animation (FPS, frames, loop)
- Render à chaque frame du jeu
### 3. Collision setup
- Définir hitbox pour collision
- Tester collisions avec autres sprites
- Ajuster hitbox si nécessaire
### 4. Tests et debug
- Afficher hitboxes en mode debug
- Vérifier timing animations
- Tester performance avec multiples sprites
## Checklist sprite
- [ ] Sprite sheet créé avec transparence PNG
- [ ] Layout défini (horizontal/grille)
- [ ] Frames chargées correctement
- [ ] Animations fluides (FPS approprié)
- [ ] Collisions détectées correctement
- [ ] Hitboxes ajustées
- [ ] Performance acceptable (60 FPS)
- [ ] Cleanup mémoire implémenté
## En cas de doute
**Source :** Jeux arcade existants + sprite utils
**Règles absolues :**
1. Toujours précharger sprites avant utilisation
2. Utiliser delta time pour animations fluides
3. Bounding box (AABB) pour la plupart des collisions
4. Sprite pooling si > 10 instances simultanées
5. Cleanup sprites inutilisés pour éviter memory leaks
**Workflow minimal :**
- Charger sprite sheet avec Image.onload
- drawImage() avec source/destination rectangles
- Collision AABB pour détection rapide