flash.display.Graphics.copyFrom()

Pour le tout 1er article de ce blog (champagne !), on va s’attaquer à une nouvelle méthode de flash.display.Graphics : copyFrom() .
Documentation : flash.display.Graphics.copyFrom()
Documentation : Dessiner avec Flash CS4

copyFrom() permet de copier ce qui a été dessiné par programmation d’une cible vers une autre cible (Shape/Sprite/..).
exemple : « cibleSource » contient les données de dessin a copier et « cibleDestination » sera la destination de la copie :mrgreen: , le code sera donc :

cibleDestination.graphics.copyFrom(cibleSource.graphics);

Voici un exemple simple d’utilisation de copyFrom(), pour s’en servir il suffit d’utiliser la souris pour dessiner.
ENTRÉE = dupliquer votre dessin.
ESPACE = tout effacer pour recommencer.

Voici le code de l’exemple :

package
{
    import flash.display.Shape;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.KeyboardEvent;
    import flash.events.MouseEvent;
    import flash.ui.Keyboard;
 
    /**
     * @author Lorenzo
     *
     * Test des nouvelles possibilités de l'API de dessin de Flash 10 -> copyFrom
     *
     * -on dessine ce que l'on veut
     * -on appuye sur ENTER pour declencher la copie + rotation
     * -on appuye sur SPACE pour tout remettre a zero
     */
    public class Main3 extends Sprite
    {
        // -----------------------------------------------------------------------------------
        // DECLARATIONS
        // -----------------------------------------------------------------------------------
        private static const THICKNESS:uint = 1;
        private static const COLOR:uint = 0xFF0000;
        private static const NB_ECART_ROTATION:uint = 12;
        private static const ROTATION:uint = 360 / NB_ECART_ROTATION;
 
        private var _shapeSource:Shape;
        private var _shapeCourante:Shape;
        private var _spriteConteneur:Sprite;
        private var _dessiner:Boolean = false;
 
        // -----------------------------------------------------------------------------------
        // CONSTRUCTEUR
        // -----------------------------------------------------------------------------------
        public function Main3():void
        {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);
        }
 
        private function init(e:Event = null):void
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
 
            creer();
 
            // mire (cercle + rayons)
            this.graphics.clear();
            this.graphics.lineStyle(1, 0xFFFFFF, 0.5);
            var ecart:uint = 300;
            this.graphics.drawCircle(stage.stageWidth / 2, stage.stageHeight / 2, ecart);
            for (var i:Number = 0; i < Math.PI * 2; i+= (Math.PI * 2) / NB_ECART_ROTATION) {
                this.graphics.moveTo(stage.stageWidth / 2, stage.stageHeight / 2 );
                this.graphics.lineTo(stage.stageWidth / 2 + Math.sin(i) * 300, stage.stageHeight / 2 + Math.cos(i) * 300);
            }
 
            stage.addEventListener(MouseEvent.MOUSE_DOWN, evtStageMouseDown);
            stage.addEventListener(MouseEvent.MOUSE_UP, evtStageMouseUp);
            stage.addEventListener(KeyboardEvent.KEY_DOWN, evtStageKeyDown);
        }
 
        // -----------------------------------------------------------------------------------
        // METHODES
        // -----------------------------------------------------------------------------------
        private function creer():void
        {
            // conteneur
            if( this._spriteConteneur )
                this.removeChild(this._spriteConteneur);
            this._spriteConteneur = new Sprite();
            this._spriteConteneur.x = stage.stageWidth / 2;
            this._spriteConteneur.y = stage.stageHeight / 2;
            this.addChild(this._spriteConteneur);
 
            // Shape dont les données de dessin seront dupliqués
            this._shapeSource = new Shape();
            this._shapeSource.graphics.lineStyle(THICKNESS, COLOR);
            this._spriteConteneur.addChild(this._shapeSource);
        }
 
        // -----------------------------------------------------------------------------------
        // EVENEMENTS
        // -----------------------------------------------------------------------------------
 
        private function evtStageMouseDown(ev:MouseEvent):void
        {
            this._shapeSource.graphics.moveTo(this._shapeSource.mouseX, this._shapeSource.mouseY);
            stage.addEventListener(MouseEvent.MOUSE_MOVE, evtStageMouseMove);
        }
 
        private function evtStageMouseUp(ev:MouseEvent):void
        {
            stage.removeEventListener(MouseEvent.MOUSE_MOVE, evtStageMouseMove);
        }
 
        private function evtStageMouseMove(ev:MouseEvent):void
        {
            this._shapeSource.graphics.lineTo(this._shapeSource.mouseX, this._shapeSource.mouseY);
        }
 
        private function evtStageKeyDown(ev:KeyboardEvent):void
        {
            switch (ev.keyCode)
            {
                case Keyboard.ENTER :
                    // dupliquer les données de dessin de shapeSource dans une nouvelle Shape en utilisant
                    // copyFrom et appliquer la rotation
                    for (var i:Number = 0; i < 360; i+=ROTATION)
                    {
                        this._shapeCourante = new Shape();
                        this._spriteConteneur.addChild(this._shapeCourante);
                        this._shapeCourante.rotation = i;
                        this._shapeCourante.graphics.copyFrom(this._shapeSource.graphics);
                    }
                    break;
                case Keyboard.SPACE :
                    // RAZ
                    creer();
                    break;
            }
        }
    }
}

Laisser un commentaire

*