IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Flash Discussion :

[FLASH 8] Problème setMask


Sujet :

Flash

  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2004
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 71
    Par défaut [FLASH 8] Problème setMask
    Bonjour,

    Actuellement je test les fonctionnalités existantes pour les bitmaps. J'arrive à découper une image sans problème. L'ennui c'est que je souhaite ensuite appliquer un masque (de forme hexagonale, d'où le calcul des positions un peu spécial) sur le petit morceau d'image et ça ne marche pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    import flash.display.BitmapData;
    import flash.geom.Rectangle;
    import flash.geom.Point;
    import flash.geom.Matrix;
     
    ciel._visible=false; // Movie clip de l'image de base
     
    var bitmapData = new flash.display.BitmapData(550,400,true,0x00000000);
    var myMatrix:Matrix = new Matrix();
    myMatrix.scale(1, 1);
    bitmapData.draw(ciel,myMatrix);
     
    var largeur:Number=60;
    var hauteur:Number=50;
     
    var nb_hexa:Number=0;
    var origine_x:Number=-20;
    var origine_y:Number=-55;
     
    for (pos_x=1;pos_x<=20;pos_x++)
    {
    	for (pos_y=1;pos_y<=20;pos_y++)
    	{			
    		if ( (!((pos_x+2)%2) && !((pos_y+2)%2)) || ((pos_x+2)%2 && (pos_y+2)%2) )
    		{
    			nb_hexa++;
    			this["conteneur"+nb_hexa]=this.createEmptyMovieClip(this["conteneur"+nb_hexa],this.getNextHighestDepth());
    			this["bitmapData_"+nb_hexa]=new BitmapData(largeur,hauteur,true,0x00FF0000);
    			this["conteneur"+nb_hexa].image=this["conteneur"+nb_hexa].createEmptyMovieClip(this["conteneur"+nb_hexa].image,this.getNextHighestDepth());
    			this["conteneur"+nb_hexa].image.attachBitmap(this["bitmapData_"+nb_hexa],this.getNextHighestDepth());			
    			this["conteneur"+nb_hexa].onPress=function() { this.startDrag(); };
    			this["conteneur"+nb_hexa].onRelease=function() { this.stopDrag(); };
    			this["conteneur"+nb_hexa]._x=origine_x+((pos_x-1)*((largeur/3)*2));
    			this["conteneur"+nb_hexa]._y=origine_y+(pos_y*(hauteur/2));
    			this["bitmapData_"+nb_hexa].copyPixels(bitmapData,new Rectangle(this["conteneur"+nb_hexa]._x,this["conteneur"+nb_hexa]._y,largeur,hauteur),new Point(0,0));
     
    			// Création du clip masque	
    			this["conteneur"+nb_hexa].masque=this["conteneur"+nb_hexa].createEmptyMovieClip(this["conteneur"+nb_hexa].masque,this.getNextHighestDepth());
     
    			// Attach du movie contenant l'hexagone		
    			this["conteneur"+nb_hexa].masque=attachMovie("hexa_vide","masque",this.getNextHighestDepth());
     
    			// Application du masque	
    			this["conteneur"+nb_hexa].image.setMask(this["conteneur"+nb_hexa].masque);
    		}
    	}
    }
    stop();
    Tout marche nickel saut les trois dernières lignes contenant le code pour générer le masque. Je pense que c'est un problème de ciblage, mais je flanche un peu ...

    quelqu'un aurait-il une idée ???

  2. #2
    Membre chevronné Avatar de ekameleon
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 401
    Par défaut
    Hello

    Bon on va voir... j'ai pas eu le temps de bien approfondir ces nouvelles fonctions mais ... let's go :

    Tu aimes bien compliquer ton code non ? Il y a moyen de faire plus simple tout de même
    Pour simplifier le code .. moi je taperai plutot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    import flash.display.BitmapData;
    import flash.geom.Rectangle;
    import flash.geom.Point;
    import flash.geom.Matrix;
     
    mc._visible = false ; // false ; // Movie clip de l'image de base
     
    var myMatrix:Matrix = new Matrix();
    myMatrix.scale(1, 1) ;
     
    var bitmapData:BitmapData = new BitmapData( mc._width, mc._height, true, 0x00000000 ) ;
    bitmapData.draw(mc, myMatrix);
     
    var w:Number = 80  ;
    var h:Number = 80 ;
     
     
    var oX:Number = mc._x ; // origine en X
    var oY:Number = mc._y; // origine en Y
     
    var cpt:Number = 0 ;
    var max:Number = 10 ;
     
    for (var x:Number = 1 ; x <= max ; x++ ) {
     
    	for (var y:Number = 1 ; y <= max ; y++ ) {         
     
    		if ( (!((x+2)%2) && !((y+2)%2)) || ((x+2)%2 && (y+2)%2) ) {
     
    			cpt++;
    			var cur:MovieClip = this.createEmptyMovieClip("container" + cpt, cpt ) ;
    			var bmpData = new BitmapData(w, h, true, 0x00FF0000) ;
    			var rec:Rectangle = new Rectangle(0, 0, w, h) ;
    			var point:Point = new Point(0,0) ;
    			bmpData.copyPixels(bmpData, rec , point);
     
    			var picture:MovieClip = cur.createEmptyMovieClip("picture" , 0);
    			picture.attachBitmap(bitmapData, 0) ;         
     
    			cur.onPress = function() { 
    		 		this.startDrag() ; 
    			}
    			cur.onRelease=function() { 
    				this.stopDrag() ; 
    			}
     
    			var mask:MovieClip = cur.attachMovie("hexa_vide", "mask", 10);
    			//picture.setMask(mask) ;			
     
    			cur._x = oX + ( (x-1)*((w/3)*2));
    			cur._y = oY + ( y* (h/2) ) ;			
     
          }
       }
    }
    Maintenant faut que je vois pourquoi cela bloque sur le setMask... j'ai vu que cela causait problème sur d'autres forums... à suivre....
    EKA+

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2004
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 71
    Par défaut yop
    hello hello,

    merci pour le code ... en revanche t'as fait quelques erreurs que j'ai recorrigé derrière. Ceci dit je faisais un ciblage assez complexe. Je code pas en AS d'habitude. Faut que je me fasse la main. Donc ça donne ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    for (pos_x=1;pos_x<=20;pos_x++)
    {
    	for (pos_y=1;pos_y<=20;pos_y++)
    	{			
    		if ( (!((pos_x+2)%2) && !((pos_y+2)%2)) || ((pos_x+2)%2 && (pos_y+2)%2) )
    		{
    			var cur:MovieClip = this.createEmptyMovieClip("container"+(++nb_hexa),this.getNextHighestDepth());
    			cur._x=origine_x+((pos_x-1)*((largeur/3)*2));
    			cur._y=origine_y+(pos_y*(hauteur/2));
    			var bmpData=new BitmapData(largeur,hauteur,true,0x00FF0000); 
    			var rec:Rectangle=new Rectangle(cur._x,cur._y,largeur,hauteur);
        	    var point:Point=new Point(0,0) ;
    	        bmpData.copyPixels(bitmapData,rec,point);
        	    var picture:MovieClip=cur.createEmptyMovieClip("picture",0);
    	        picture.attachBitmap(bmpData,0);
    			cur.onPress = function() { this.startDrag(); }
    	        cur.onRelease=function() { this.stopDrag(); } 
     
    			var masque:MovieClip=cur.createEmptyMovieClip("masque",0);
    			masque.attachMovie("hexa_vide","masque",this.getNextHighestDepth());
    			picture.setMask(masque);
    		}
    	}
    }
    Le masque ne fonctionne toujours pas. Je continue à chercher. Héhé, je finirai bien par trouver

    ++

  4. #4
    Membre confirmé
    Inscrit en
    Septembre 2004
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 71
    Par défaut
    yop,

    bon ben oui j'ai trouvé, c'était juste un pb de profondeur en creant le movieClip 'masque'.

    Faut mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var masque:MovieClip=cur.createEmptyMovieClip("masque",this.getNextHighestDepth());
    à la place de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var masque:MovieClip=cur.createEmptyMovieClip("masque",0);
    ce qui est logique hihi.
    ça aurait du marcher, mais par erreur, t'avais mis 0 dans le createEmptyMovieClip.

    voilà voilou. bon now jvais tester les ptits effet de blur la dessus


    Merci pour ton aide
    @bientôt

  5. #5
    Membre chevronné Avatar de ekameleon
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 401
    Par défaut
    Au dessus j'ai mi 10 au niveau de la profondeur... fait gaffe à la méthode getNextHighestDepth() surtout si tu utilises des composants Macromedia

    EKA+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 14/01/2006, 20h30
  2. [FLASH MX] Problème avec l'objet Date
    Par n_tony dans le forum Flash
    Réponses: 13
    Dernier message: 22/03/2005, 13h44
  3. [FLASH MX]Problème de bouton et de _level
    Par Geilgestorm dans le forum Flash
    Réponses: 9
    Dernier message: 01/07/2004, 16h37
  4. [Flash MX] Problème d'ouverture d'URL
    Par n_tony dans le forum Flash
    Réponses: 2
    Dernier message: 07/04/2004, 16h13
  5. [Flash Mx] Problème de contour texte
    Par tahiti bob dans le forum Flash
    Réponses: 13
    Dernier message: 12/03/2004, 13h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo