Artkabis

Salut !!!
Si vous êtes membre du forum, vous pouvez vous connecter.
Au cas contraire vous avez la possibilité de créer gratuitement un compte...

Forum d'entraide en graphisme et webdesign. Formation pour Flash, Photoshop et les langages: as2, as3, html, php, javascript, etc.


    Charger une armature (IK) grâce à un fichier loader

    Partagez

    artkabis
    Fondateur
    Fondateur

    Messages : : 4545
    Age : : 32
    Logiciels : Logiciels : : Photoshop CS4, Flash CS4, Indesign CS4, After Effects CS4, Illustrator CS4, Premier Pro CS4, Encore CS4, Flexbuilder 3, Papervision 3D, Camtasia, Captivate, InDesign, Swift 3d, Illustrator, Dreamweaver CS3, Blender, Swift 3D, WampServer.
    Date d'inscription : 11/09/2008

    Capacités en graphisme
    Capacité graph:
    9/10  (9/10)

    Charger une armature (IK) grâce à un fichier loader

    Message par artkabis le Jeu 4 Déc - 23:49

    Salut les loulous, voici un petit tutoriel qui vous permettra de gérer le chargement d'une armature plus communément appelé squelette. L'intérêt de ce tutoriel réside dans passage des paramètres de l'armature. En effet une fois chargé le squelette gardera toutes ces propriétés et il sera donc possible d'utiliser toutes les fonctionnalités liées au propriétés de l'outils Bone.

    Voici tout d'abord les fichiers sources:
    charg_bones.zip

    Le code:
    Code:

    import fl.ik.*;
    import flash.display.*;

    var requete:URLRequest = new URLRequest ("armature2.swf");
    var charge:Loader = new Loader();
    charge.load(requete);
    charge.contentLoaderInfo.addEventListener(Event.COMPLETE,init);
    var clipBone:Sprite;
    var monArmature:IKArmature;

    function init(pEvt:Event):void{
       clipBone = Sprite(charge.content);
       clipBone.buttonMode=true;
       addChild(clipBone);
       IKManager.setStage(stage);
       monArmature = IKManager.getArmatureAt(0);
       monArmature.registerElements(stage);
       IKManager.trackAllArmatures(true);
    };   

    Le tutoriel:


    Dernière édition par artkabis le Ven 6 Mar - 11:56, édité 1 fois

    simox
    Nouveau membre
    Nouveau membre

    Messages : : 1
    Age : : 32
    Logiciels : Logiciels : : Quelles logiciel utilisez vous?
    Date d'inscription : 07/02/2009

    Re: Charger une armature (IK) grâce à un fichier loader

    Message par simox le Ven 6 Mar - 9:18

    merci bcp pour le tuto, mais le fichier chargement_armature.zip on ne peut pas le télécharger et merci encore une fois Wink

    rockntrek
    Nouveau membre
    Nouveau membre

    Messages : : 6
    Age : : 33
    Logiciels : Logiciels : : Notepad ++, FlashDevelop, Flash, PSP Photo X2
    Date d'inscription : 14/03/2009

    Re: Charger une armature (IK) grâce à un fichier loader

    Message par rockntrek le Sam 14 Mar - 15:30

    Salut !
    Je viens de recevoir Flash CS4 et je doit dire que je suis un peu largué au niveau des classes IK.
    J'ai visionné ton tuto, j'ai refait l'exercice à ma sauce, c'est Ok merci !

    Maintenant, est-qu'il serait possible de pousser un peu plus loin l'exo.

    Imaginons, qu'une fois notre swf chargé, on veuille non pas passer la méthode trackAllArmatures à true mais plutôt que le dernier élément du squelette suive automatiquement la position de la souris (sans click). Possible ?

    artkabis
    Fondateur
    Fondateur

    Messages : : 4545
    Age : : 32
    Logiciels : Logiciels : : Photoshop CS4, Flash CS4, Indesign CS4, After Effects CS4, Illustrator CS4, Premier Pro CS4, Encore CS4, Flexbuilder 3, Papervision 3D, Camtasia, Captivate, InDesign, Swift 3d, Illustrator, Dreamweaver CS3, Blender, Swift 3D, WampServer.
    Date d'inscription : 11/09/2008

    Capacités en graphisme
    Capacité graph:
    9/10  (9/10)

    Re: Charger une armature (IK) grâce à un fichier loader

    Message par artkabis le Sam 14 Mar - 16:51

    Alors il faut voir dans la doc officiel, mais je pense que cela est faisable via l'utilisation de la classe IKManager.

    Enssuite, je sais qu'il est possible de cibler un bone grace à l'utilisation de la classe IKBone. Perso, je ferais comme ceci:

    Code:
    var Arma:IKArmature = IKManager.getArmatureByName("arma");
    var bone:IKBone = Arma.getBoneByName("bone1");
    var jointur:IKJoint = bone.tailJoint;
    var pos:Point = jointur.position;

    Aprés il suffit de cibler le bon "ik" pour lui affecter un mouvement en fonction de la souris:
    Code:
    addEventListener(Event.ENTER_FRAME, boug);

    function boug(e:Event):void{       
              var sourisY:int = Math.round(mouseY);
              var sourisX:int = Math.round(mouseX);
              var  pointS = new point(sourisY,sourisX);
              ik.moveTo(pointS);
    }
    Enfin un truc du genre, tu vois?


    _________________
    J'me fais de la pub et na tongue

    rockntrek
    Nouveau membre
    Nouveau membre

    Messages : : 6
    Age : : 33
    Logiciels : Logiciels : : Notepad ++, FlashDevelop, Flash, PSP Photo X2
    Date d'inscription : 14/03/2009

    Re: Charger une armature (IK) grâce à un fichier loader

    Message par rockntrek le Sam 14 Mar - 18:08

    Je viens de faire quelques test.
    En fait, la classe IKBone n'hérite pas de la méthode MoveTo; il faut utiliser la classe IKMover.
    Voilà le code que j'ai :
    Code:

    import fl.ik.IKArmature;
    import fl.ik.IKManager;
    import fl.ik.IKBone;
    import fl.ik.IKJoint;
    import fl.ik.IKMover;
    import flash.geom.Point;

    var loader:Loader = new Loader();
    var squelette:MovieClip = new MovieClip();
    var sqIK:IKArmature;
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, displaySquelette);
    loader.load(new URLRequest("Squelette.swf"));

    var attach:IKBone;
    var jointure:IKJoint;
    var mover:IKMover;

    function displaySquelette(evt:Event):void
    {
        squelette = evt.target.content as MovieClip;
        addChild(squelette);
        IKManager.setStage(stage);
        sqIK = IKManager.getArmatureAt(0);
        sqIK.registerElements(stage);
       
        attach = sqIK.getBoneByName("ikBoneName7");
        jointure = attach.tailJoint;
        var pos:Point = jointure.position;
        mover = new IKMover(jointure, pos);
        stage.addEventListener(MouseEvent.MOUSE_MOVE, moveBone);
    }
    function moveBone(evt:MouseEvent):void
    {
        var sourisY:int = Math.round(mouseY);
        var sourisX:int = Math.round(mouseX);
        var pointS:Point = new Point(sourisY,sourisX);
        mover.moveTo(pointS);
    }
    J'ai bien le squelette qui s'anime en fonction du déplacement de la souris mais ça part dans des sens non voulu... une idée ?


    Dernière édition par rockntrek le Sam 14 Mar - 19:31, édité 1 fois

    rockntrek
    Nouveau membre
    Nouveau membre

    Messages : : 6
    Age : : 33
    Logiciels : Logiciels : : Notepad ++, FlashDevelop, Flash, PSP Photo X2
    Date d'inscription : 14/03/2009

    Re: Charger une armature (IK) grâce à un fichier loader

    Message par rockntrek le Sam 14 Mar - 18:15

    Autant pour moi, j'ai inversé sourisX et sourisY Razz


    rockntrek
    Nouveau membre
    Nouveau membre

    Messages : : 6
    Age : : 33
    Logiciels : Logiciels : : Notepad ++, FlashDevelop, Flash, PSP Photo X2
    Date d'inscription : 14/03/2009

    Re: Charger une armature (IK) grâce à un fichier loader

    Message par rockntrek le Sam 14 Mar - 19:30

    On pousse encore un peu plus loin ?

    J'essaye maintenant d'appliquer la methode MoveTo à l'IKMover des plusieurs squelettes en prenant l'exemple d'un clip contenant une IKArmature en 3 segements sur une ligne qui serait dupliqué sur la scène afin de représenter des brins d'herbe qui auront tendance à vouloir s'accorcher au pointeur de la souris.

    artkabis
    Fondateur
    Fondateur

    Messages : : 4545
    Age : : 32
    Logiciels : Logiciels : : Photoshop CS4, Flash CS4, Indesign CS4, After Effects CS4, Illustrator CS4, Premier Pro CS4, Encore CS4, Flexbuilder 3, Papervision 3D, Camtasia, Captivate, InDesign, Swift 3d, Illustrator, Dreamweaver CS3, Blender, Swift 3D, WampServer.
    Date d'inscription : 11/09/2008

    Capacités en graphisme
    Capacité graph:
    9/10  (9/10)

    Re: Charger une armature (IK) grâce à un fichier loader

    Message par artkabis le Sam 14 Mar - 21:05

    Déjà tu devrais augmenter l'ips de ton animation, car si le mouvement du curseur est trop rapide, le bone est complètement dans les choux.

    Après, j'ai une autre question:

    Quel est ton niveau en actionScript, comprends-tu ce que tu copies dans ton projet, ou prends-tu juste des scripts à droite à gauche. C'est important si tu veux que je puisse t'aider et non te mâcher le travail, car ton intérêt n'est pas de copier bêtement des choses que tu ne comprendrais pas, avant de courir il faut bien marcher et même commencer par se tenir sur ses deux genoux. Après, je ne connais absolument pas ton niveau, c'est d'ailleurs pour ça que je te pose ces questions.

    Concernant ton projet (herbes attirer par la position du curseur), là encore il faudra quelque-chose de plus costaud au niveau du script, en effet tu peux te rendre compte qu'avec une armature assez simple, ton animation n'est pas encore totalement fluide, je pense qu'il va falloir développer des IK dynamique, car si tu souhaites créer un effet avec une multitude d'armatures, il va falloir que ton code soit plus poussé, autrement tu risques de cramer pas mal de ressources pour pas grand chose.

    Donc j'attends ta réponse pour que l'on puisse continuer à progresser sur ce projet.
    Il va falloir aussi coder en externe (dans un package), car pour l'instant ce n'est pas très propre.

    PS:Je vais déplacer le sujet dans la section, flash>>une question ? un problème du topic "as3"


    _________________
    J'me fais de la pub et na tongue

    rockntrek
    Nouveau membre
    Nouveau membre

    Messages : : 6
    Age : : 33
    Logiciels : Logiciels : : Notepad ++, FlashDevelop, Flash, PSP Photo X2
    Date d'inscription : 14/03/2009

    Re: Charger une armature (IK) grâce à un fichier loader

    Message par rockntrek le Sam 14 Mar - 21:51

    Je n'ai pas de niveau en AS3. Ca va faire 2 ans que je m'y suis mis (en lançant ma boite) et j'en apprends encore tout les jours.
    Maintenant, je ne débute pas non plus (enfin avec CS4 et ses IK si Razz ), j'ai commencé à m'intéresser à Flash dans dans sa version 5.

    Des IK dynamqiues ?
    Aide de Flash
    Comme les squelettes ne peuvent être créés que dans l'outil de programmation Flash...

    Sais-tu à quoi sert précisément la méthode setStage de la classe IKManager parce qu'elle n'est pas documenté dans l'aide de Flash :

    setStage()méthode
    public static function setStage(stage:DisplayObjectContainer):void

    Paramètres

    stage:DisplayObjectContainer



    Question package, je bosse dans mes projets avec FlashDevelop pour le code (trop galère dans l'IDE) et d'ailleurs, sais-tu comment incorporer le SWC IK dispo dans C:\Program Files\Adobe\Adobe Flash CS4\Common\Configuration\ActionScript 3.0\libs (XP) à FlashDevelop de façon permanente sans à avoir à l'incorporer dans chaque projet ?

    Sinon voilà ou j'en suis dans le code (j'ai zappé le chargement et j'ai lié un MovieClip contenant une ligne divisé en 3 segments via l'outil Bone):
    Code:

    import fl.ik.IKArmature;
    import fl.ik.IKManager;
    import fl.ik.IKBone;
    import fl.ik.IKJoint;
    import fl.ik.IKMover;
    import flash.geom.Point;

    var ligne:Ligne;
    var i:int;
    var posX:int;
    var nbLigne:int = 91;

    for(i=0; i <= nbLigne; i++)
    {
        ligne = new Ligne();
        ligne.y = stage.stageHeight;
        ligne.x = posX;
        posX +=6;
        addChild(ligne);
    }

    IKManager.setStage(stage);

    stage.addEventListener(MouseEvent.MOUSE_MOVE, moveBone);

    function moveBone(evt:MouseEvent):void
    {
        var sourisY:int = Math.round(-mouseY);
        var sourisX:int = Math.round(mouseX);
        var  pointS:Point = new Point(sourisX,sourisY);
       
        var sqIK:IKArmature = IKManager.getArmatureAt(0);
        sqIK.registerElements(stage)
       
        var attach:IKBone = sqIK.getBoneByName("ikBoneName3");
        var jointure:IKJoint = attach.tailJoint;
        var pos:Point = jointure.position;
        var mover:IKMover = new IKMover(jointure, pos);
       
        mover.moveTo(pointS);
    }


    Le truc qui m'échappe c'est la ligne
    Code:
    var sqIK:IKArmature = IKManager.getArmatureAt(0);
    Parce que si je met une boucle dans la fonction moveBone pout tenter d'animer chaque squelette (Ligne) et que je met
    Code:
    var sqIK:IKArmature = IKManager.getArmatureAt(i);
    Alors j'ai des erreurs...

    Actuellement, seul la première ligne est en interaction avec la souris :

    artkabis
    Fondateur
    Fondateur

    Messages : : 4545
    Age : : 32
    Logiciels : Logiciels : : Photoshop CS4, Flash CS4, Indesign CS4, After Effects CS4, Illustrator CS4, Premier Pro CS4, Encore CS4, Flexbuilder 3, Papervision 3D, Camtasia, Captivate, InDesign, Swift 3d, Illustrator, Dreamweaver CS3, Blender, Swift 3D, WampServer.
    Date d'inscription : 11/09/2008

    Capacités en graphisme
    Capacité graph:
    9/10  (9/10)

    Re: Charger une armature (IK) grâce à un fichier loader

    Message par artkabis le Sam 14 Mar - 22:47

    Concernant le setStage, je pense que c'est normal de ne pas trouver cette fonction puisque, ceci est une méthode, je pense que tu dois connaitre les getter setter, qui permettent de modifier des variables private, en fait en faisant un setStage il est maintenant possible d'accéder directement à la classe Stage et non de la classe Stage de IkManager qui n'existe pas à ma connaissance. Mais, peut être que je me trompe.

    Concernant FlashDeveloppe, en fait je ne peux pas t'aider, car je n'ai jamais pu installer ce log sans que celui-ci se crache à la première ouverture, je ne sais pas pourquoi ni comment, mais je crois que flash dev n'aime pas mon pc, car à chaque nouvelle mise à jour c'est la même histoire.

    En ce qui concerne la boucle, peux tu partager ton fla, ça m'évitera de recommencer ce qui a été déjà fait, comme ça je vais essayer de voir comment il est possible d'activer le mouvement sur la totalité des bones.


    _________________
    J'me fais de la pub et na tongue

    rockntrek
    Nouveau membre
    Nouveau membre

    Messages : : 6
    Age : : 33
    Logiciels : Logiciels : : Notepad ++, FlashDevelop, Flash, PSP Photo X2
    Date d'inscription : 14/03/2009

    Re: Charger une armature (IK) grâce à un fichier loader

    Message par rockntrek le Dim 15 Mar - 0:45

    Voilà le FLA : http://www.speedyshare.com/806441553.html

    Contenu sponsorisé

    Re: Charger une armature (IK) grâce à un fichier loader

    Message par Contenu sponsorisé Aujourd'hui à 13:42


      La date/heure actuelle est Sam 3 Déc - 13:42