Il y a quelques temps, j'ai commencé un logiciel pour créer des animations (pour les spritesheets de mes jeux ou pour simplement créer des animations). Voici donc quelques informations concernant ce soft, des images et pitet une démo si vous êtes sages ^^.
MISE A JOUR : 29/04/2016
■ Nom : Sprite Animation (nom à revoir, si vous avez un meilleur nom, n'hésitez pas

■ Objectifs :
- créer des animations de sprites (linéaires pour le moment) : position, rotation, échelle (scale), alpha, depth (?), image
- créer un skeleton et pouvoir assigner un bone à un ou des sprites, et les animations des bones se répercutent sur les sprites (pour animer un personnage, par exemple)
■ Version actuelle : 0.11
La version disponible est une pré-version bêta, qui comporte certainement encore quelques bugs et qui est loin d'être terminée ^^.
Limitation :
- le système de bone n'est pas du tout terminé
- les interpolations entre les clefs d'animations sont implémentées, mais je dois optimiser ça par la suite ^^.
http://blendman.free.fr/dev/pb/spritean ... on0.11.zip
(La nouvelle version n'est pas encore disponible, car j'ai encore quelques bugs à corriger)
■ Videos
0.18
https://youtu.be/Y-jQ3xCbR4I
■ Screenshots
0.11

0.10

0.08

Old :

http://blendman.free.fr/dev/pb/spritean ... on0.05.jpg
http://blendman.free.fr/dev/pb/spritean ... on0.04.jpg
http://blendman.free.fr/dev/pb/spritean ... on0.03.jpg
■ Fonctions disponibles
0.18
// New
- le parenting fonctionne désormais avec les rotations (entre bone et entre bone et sprites). il reste quelques bugs, mais c'est utilisable (pinaise c'était hyper galère ^^)

- ajout paramètre speed animation preview
- export option (in animation propertie) : x,y,w,h,zoom
- export image ou image sequence (png, jpg)
- sprite et bone sélection améliorée (merci Fig !!!!)
- on peut désormais changer la couleur des sprites (mode multiply)
- splashscreen à l'ouverture
// Fixes
- beaucoup de bugs corrigés
0.11
// New
Timeline
- on voit la currentframe ainsi que la frame de départ et de fin.
- On peut bouger la currentFrame directement sur la timeline
- Visible : clefs lorsqu'elle sont ajoutées par sprite, canal du sprite selectionné
- on peut bouger les clefs des sprites ou bones
Interpolation
- l'interpolation est fonctionnelle entre les clefs des objets
0.10
// New
- Parenting : on peut parenter un sprite (ou un bone) avec un bone. Quand on effectue certaines transformations sur le bone parent (move, scale, scaleW, scaleH), c'est répercuté sur les enfants (bone ou sprite)
- sprite : désormais les sprites prennent en compte l'offset de leur image dans leur transformations. Les rotations et scale s'effectuent en fonction de ce centre par exemple (et non en w/2,h/2 et 0,0 par defaut). Attention, les sprites (et bones) ne prennent pas encore l'offset du bone parent dans leurs transformations.
- sprite : on peut animer les paramètres width et height, on peut aussi changer l'image entre différentes frames (utile pour les animation de type bouche, yeux...)
- Images : on peut modifier le centre (offset) des images, cela se répercutent sur les sprites.
- Ajout d'une Toolbar avec quelques boutons
- les gadgets et ecran sont redimensionnés quand on change la taille de la fenêtre
- Undo/redo (à revoir, mais fonctionne à peu près)
- options : chargement et sauvegarde des options lors de l'ouverture du soft
- autosave : désormais, je crée un fichier de sauvegarde automatique (d'après un timer qu'on peut définir dans les options.ini)
- lang : on peut changer la langue du soft si besoin (anglais ou français pour le moment)
// Fixes
- corrections dans OpenDoc : les frames > 0 étaient mal prises en compte
- correction lors de la sauvegarde
- corrections de divers bugs (images et autre)
0.08 (& précédentes)
. File : new, open, save/saveAs
. Image : on peut sélectionner une image et créer un sprite avec. Lorsqu'on crée un nouveau project, les images du dossier sont automatiquement ajoutées à la liste des images disponibles pour le projet.
. sprite : création, suppression, position, rotation, scale, alpha, image, depth. On peut transformer le sprite (position, rot,scale,alpha, depth), changer son image.
. Bone: création, suppression, sélection, position, rotation, scale.
. Animation : on peut ajouter ou supprimer une keyframe sur un sprite (prend en compte les paramètres : position, rotation, scale, alpha), on peut jouer l'animation. Lorsqu'on change de frame, si on transforme le sprite (position, rotation, scale, alpha, depth), si la clef n'existe pas elle est créé pour ce sprite avec les paramètres qu'on a modifié, sinon, ça modifie les paramètres pour la clef sélectionnée.
. Ui : pan (bouger la vue), zoom, animation (nb total de frame, fps, clef courante...)
Note : Pour le moment, l'interpolation se calcule uniquement lors des clef d'animation pour les sprites. Donc, si on démarre entre deux clefs, ça fait n'importe quoi jusqu'à ce qu'on arrive sur une clef d'animation. Mais je modifierai ça très prochainement.
■ Todo-list
UI
ok 0.05 - ajouter le zoom √
ok 0.06 - select sprite √
ok 0.07 - select bone √
ok 0.09 - ajouter Toolbar : New, open, save| add (A), select (clic), move (G),rot (R), scale(S) √
ok 0.06 - option : BG Checker √
- option : BG color
- option : BG Image
- pouvoir changer le BG (image)
- pouvoir mettre une image de référence (par exemple pour shibi pour bien placer les yeux, etc...)
Animation (général)
ok 0.08 - ajouter list animation √
ok 0.08 - pouvoir selectionner l'animation √
ok 0.08 - pouvoir ajouter une nouvelle animation √
ok 0.08 - pouvoir supprimer une animation √
- pouvoir cloner une animation
Animation des sprites
ok 0.11 - ajouter les interpolation entre les clefs à recalculer si on change de frame √
ok 0.10 - spritetransformation: avoir les rotation et transformation avec l'offset √
Edition
ok 0.10 - undo √
ok 0.10 - redo √
- historic ?
View
ok 0.06 - reset view √
ok 0.06 - center view √
ok 0.06 - view to sprite √
Files
ok 0.05 - new √
ok 0.06 - open √
ok 0.05 - save √
ok 0.05 - save As √
ok 0.16 - export all frame as separated images (png) : image or sequence√
- export all frames as avi
- export all frames as gif
Images
ok 0.05 - ajouter biblio image √
ok 0.05 - pouvoir select image pour créer sprite √
Bone
ok 0.07 - ajouter bone √
ok 0.08 - supprimer bone √
ok 0.08 - bone name √
ok 0.06 - pouvoir selectionner bone √
ok 0.06 - pouvoir bouger bone √
ok 0.07 - pouvoir rotationner bone √
ok 0.07 - pouvoir scaler bone √
ok 0.06 - draw bone move √
ok 0.07 - draw bone rotate √
ok 0.07 - draw bone scale √
ok 0.10 - ajouter parenting bone (bouger/rotationner/scaler bone bouge les enfants) √
ok 0.10 - qd bone bouge, child bougent √
ok 0.10 - qd bone scale, child scale avec scale parenting √
ok 0.14 - ajouter anim de bone R √
ok 0.14 - ajouter anim de bone G √
ok 0.14 - ajouter anim de bone S √
ok 0.15 - qd bone rotate, child rotate, avec rotation parenting
- ajouter l'offset dans les transformations avec le parent
- ajouter anim de bone Depth
- ajouter anim de bone Alpha
- ajouter anim de bone color
Images
ok 0.09 - pouvoir changer offset Image (et donc du sprite, zoom et rotation) √
ok 0.10 - pouvoir faire un update du dossier des images √
Sprite
ok 0.05 - pouvoir changer depth sprite √
ok 0.08 - pouvoir changer image sprite √
ok 0.06 - select by name √
ok 0.06 - sprite name √
ok 0.08 - supprimer sprite √
ok 0.10 - animation de sprite Rotation (R) √
ok 0.10 - animation de sprite Move (G = Grab) √
ok 0.10 - animation de sprite Scale (S) √
ok 0.10 - animation de sprite sizeH √
ok 0.10 - animation de sprite SizeW √
ok 0.10 - animation de sprite Alpha √
ok 0.11 - animation de sprite Image √
Timeline
ok 0.11 - ajouter timeline √
ok 0.11 - ajouter framecurrent √
ok 0.11 - pouvoir bouger framecurrent √
ok 0.11 - voir key par sprite √
ok 0.11 - pouvoir bouger key par sprite √
ok 0.12 - pouvoir supprimer key par sprite √
ok 0.20 - pouvoir copier/coller key par sprite √
- voir keyframe generale
- pouvoir bouger keyframe generale
- pouvoir supprimer keyframe generale
- pouvoir copier/coller keyframe general
? - voir key par sprite (rot,scale, pos, alpha...)
■ Remerciements
- Bien entendu, je remercie Fred et la Team de Purebasic pour cet extraordinaire langage et toutes les possibilités qu'il offre

- Stargate (rotation sprite Not centered) et système de bone (bone /sprite parenting)
- Fig : merci pour la découpe de sprite automatique et l'amélioration de la sélection des sprites et bones
- Mesa/Typhon/Comtois : sprite bounding box et aide en général
- Dobro (spock) : merci pour l'aide pour le parenting des bones (même si au final j'utilise une autre méthode ^^).
- Rashad pour l'aide en général
- Falsam : merci pour la mise en page pour cette présentation, je me suis inspiré d'une mise en page d'une de tes projets

■ Infos techniques
Ce logiciel utilise les libs suivantes :
- Screen & Sprite (affichage surface centrale, interactions), keyboard (keyboard sur surface de travail). Je n'utilise pas encore mouseX()/MouseY(), peut-être dans la version linux/Mac si j'en fais une.
- Window, windowmouseX/Y
- Menu, statusBar (je crée ma toolbar à la main)
- Gadgets (pour le canvas : timeline, preview image center...)
- vectorDrawing : export et outil de dessin vectoriel (version allégée et intégrée de Cartoon, mon autre logiciel d'animation vectorielle)
- Json (options)
- image, image plugin, font
- Array & sort : des array() pour gérer tous les sprites et les bones. Quelques list() et pas encore de map()
- Files & Filesystem (open, save documents), date, string
- Math : pour beaucoup d'opération (rotation...)
- Requester, OnError
- Thread (lors de la lecture de l'animation notamment)
- Http (pour recevoir l'avertissement de mise à jour) et Network (pour certaines opérations de renderfarm)
Aucune lib 3D n'est utilisée (pour le moment).
■ Suggestion, remarques
Si vous avez des idées, des suggestions ou des remarques, n'hésitez pas

■ Purebasic feature request
J'en profite pour poster ma petite des features-requests que j'aimerai voir ajoutées dans Purebasic (Fred, si tu me lis


J'utilise le screen et les sprites pour de très nombreuses applications que je développe. Donc, ces nouvelles fonctions pourraient être très utiles pour les jeux et pour les applications graphiques :
- DrawBuffer(sprite) : pouvoir dessiner des sprites sur un sprite (avec canal alpha), comme c'était le cas autrefois avec l'ancien système de sprite.
Autres fonctions (on peut déjà le faire par nous-même, mais ce serait peut-être mieux en internet ^^)]
- SpriteImage(Sprite, Image) (équivalent de CreateSprite3D(Sprite, image)) : dans une version ultérieure, on pouvait faire ça avec les sprite3D, ce serait bien pouvoir à nouveau le faire, ça éviterait de faire des loadsprite() tout le temps, on pourrait charger une image (dynamiquement, c'est donc différent de catch sprite où les images sont statiques) et facilement créer des sprites avec cette image. Avec SpriteImage(sprite, image), on pourrait aussi changer dynamiquement l'image d'un sprite, si le sprite existe (sa nouvelle taille serait alors la taille de la nouvelle image.
- SpriteColor() : permet de changer la couleur (en mode multiply) du sprite. Attention, c'est différent de la couleur changée avec DisplayTransparentSprite(), car la couleur est remplacée dans cette dernière fonction, et multipliée comme avec ma demande.
- SpriteOffset() : pour placer un centre à nos sprites. Ainsi, les zoom et rotation se feraient en fonction de cet offset() ou non.
Shaders
Ca, ce serait vraiment intéressant, mais j'imagine que ce n'est pas du tout évident à coder (à moins que ça ne soit disponible qu'avec openGL) :
- LoadShader(shaderID, nom.vs,nom.ps)
- SetShaderparameter(Shader, parameter$, valeur)
- SpriteShader(sprite,shader), : pour charger un shader (GLSL), et que le sprite l'utilise.