Probleme Event/StageX/Enterframe

Résolu
aerofx Messages postés 11 Date d'inscription lundi 19 juin 2006 Statut Membre Dernière intervention 23 août 2009 - 15 avril 2009 à 18:15
aerofx Messages postés 11 Date d'inscription lundi 19 juin 2006 Statut Membre Dernière intervention 23 août 2009 - 16 avril 2009 à 14:05
Bonjour,

Tout nouveau avec AS3 je suis un peu perdu..

Voilà, j'essaie de faire une petite fonction toute bête (dessiner des carrés à la suite de toute les couleurs) mais qui me pose problème et je pense que cela pourra m'aider dans ma compréhension générale de l'AS3.
Mon problème est que j'ai un "conflit" avec le stageX placer dans la fonction enterframe. Comment résoudre ce problème?
Merci d'avance pour votre aide,

FX

Voici le code de ma class:

package
    {
    // import des classes necessaires
    //import flash.events.TUIO;
    import flash.net.URLRequest;
    import flash.display.*;
    import flash.events.*;
    //import flash.geom.*;

   
   
   
    dynamic public class Gone extends MovieClip
   
    {
        var sqrholder:Sprite=new Sprite();
        var onoff:Number=1;
       
       
        public function Gone(){
           
            //mise en oeuvre du TUIO
        TUIO.init( this, 'localhost', 3000, '', true );
           
            // attach du conteneur à carrés
        addChild(sqrholder);
   
            //Ecouteur à clic pour placer les carrés:
            stage.addEventListener(MouseEvent.MOUSE_DOWN, dessineCarre);
            stage.addEventListener(MouseEvent.MOUSE_UP, dessineCarreOFF);
           
            //stage.addEventListener(TouchEvent.MOUSE_DOWN, dessineCarre);
            //stage.addEventListener(TouchEvent.MOUSE_UP, dessineCarreOFF);
        }
       
       
        private function enterframe(e:Event){
            //nouveau carre
            var sqr:Sprite = new Sprite();
            //def du carre
            sqr.graphics.beginFill(0xFFFFFFFF*(Math.random()),1);
            sqr.graphics.drawRoundRect(-25,-25,50,50,40,40);
            sqr.x = e.stageX
            sqr.y = e.stageY;
            //attach du carre dans son conteneur:
            sqrholder.addChild(sqr);
            }
           
        //Fonction de dessinage de carrés:
            private function dessineCarre(pe:Event)
                {
            //trace("ON");
            stage.addEventListener(Event.ENTER_FRAME,enterframe);
            }
       
        //Fonction d'arret de dessinage de carrés:
            private function dessineCarreOFF(pe:Event)
                {
            //trace("OFFFFFFF");
                stage.removeEventListener(Event.ENTER_FRAME,enterframe);
            }
       
    }
}

3 réponses

Improve Messages postés 176 Date d'inscription mardi 27 novembre 2007 Statut Membre Dernière intervention 28 novembre 2009
16 avril 2009 à 09:54
J'ai bien du mal à suivre ton script. Juste la méthode drawRoundRect(); demande 5 paramètres alors que tu en as 6. Celui-ci devrais levé une erreur à la compilation.

Tu utilise les ressources à un moment du script qui n'est pas essentielle. Voici un exemple »

dynamic public class Gone extends MovieClip
{
//.. Non initialisé. Non mémorisé.
var sqrholder:Sprite;
var onOff:Number;
//..
public function Gone()
{
//.. Initialisation de l'objet et
//.. mise en mémoire de l'objet.
sqrholder = new Sprite();
addChild(sqrholder);
//..
onOff = 1;
}
}

Cette façon de faire optimise ton programme et par le fait centralise ton code. C'est un peu plus propre. N'oubli pas que la mise en mémoire d'un objet se fait à partir du moment où une variable est initialisée. Il n'était pas nécessaire dans ton cas d'initialisée la variable sqrholder dans la zone des définitions des membres de classe.

Tu devrais aussi protéger tes variables
Voici un exemple »

private var sqrholder:Sprite;
private var onOff:Number;

Beaucoup d'autres choses pourront être dit à propos de ton écriture » Exemple.

import flash.display.*;

Tu importe toutes les classes du package flash.display alors que tu n'utilise que MovieClip et Sprite. Prends soin de celà car ainsi tu optimise ton programme. Il ne sert à rien d'importer des classes que tu n'utilise pas.

C'est beaucoup mieux ainsi »

import flash.display.MovieClip;
import flash.display.Sprite;

Si tu n'as pas le PDF de Thibeault Imbert voici l'adresse de son livre.
1096 pages en français. Que du bonheur dans l'apprentissage AS3.

http://pratiqueactionscript3.bytearray.org/?page_id=4

Improve
3
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
15 avril 2009 à 19:05
Bonsoir,

Le problème est que "stageX" est une propriété de MouseEvent, et pas d'Event .. donc n'est pas applicable dans le cas présent.
Je me demande d'ailleurs ce que tu cherches à récupérer via cette méthode ...

Peg'
0
aerofx Messages postés 11 Date d'inscription lundi 19 juin 2006 Statut Membre Dernière intervention 23 août 2009
16 avril 2009 à 14:05
Hello,

Merci pour vos réponse, j'ai finalement trouvé réponse à ma question (pour faire correspondre mes petits carrés aux curseurs TUIO, il fait recupérer leurs coordonnées via  la méthode TUIOObject , il me semble).
Merci Improve, je vais suivre tes conseils pour l'optimisation du code et puis , conseiller le livre de Thibault Imbert est toujours une bonne chose!
Bonne journée,
FX
0
Rejoignez-nous