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 , 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; } } } }