begin process at 2012 05 26 06:46:07
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Menu & navigation

 > RECTANGLE DE SELECTION

RECTANGLE DE SELECTION


 Information sur la source

Note :
Aucune note
Catégorie :Menu & navigation Classé sous :rectangle, selection, zone Niveau :Initié Date de création :16/07/2005 Date de mise à jour :19/07/2005 13:28:03 Vu / téléchargé :4 133 / 607

Auteur : apokalypse

Ecrire un message privé
Commentaire sur cette source (23)
Ajouter un commentaire et/ou une note

 Description

Une fonction simple qui permet de créer un rectangle de selection facilement paramétrable. la fonction dessine un clip rectSelect sur la scène et se paramètre comme ceci:
RectangleSelection(profondeur, couleurFond, alphaFond, couleurContour, alphaContour, epaisseurContour)
Cliquez, glissez, relachez!:)

Source

  • function RectangleSelection(level, couleurFond, couleurContour, alphaFond, alphaContour, epaisseurContour) {
  • if (!level["rectSelect"]) {
  • var leClip = level.createEmptyMovieClip("rectSelect", level.getNextHighestDepth());
  • leClip.couleurFond = couleurFond;
  • leClip.couleurContour = couleurContour;
  • leClip.alphaFond = alphaFond;
  • leClip.alphaContour = alphaContour;
  • leClip.epaisseurContour = epaisseurContour;
  • leClip.onMouseDown = function() {
  • this._x = _root._xmouse;
  • this._y = _root._ymouse;
  • this.click = true;
  • };
  • leClip.onMouseUp = function() {
  • this.clear();
  • this.click = false;
  • };
  • leClip.onMouseMove = function() {
  • if (this.click) {
  • var maxDepth = this._parent.getNextHighestDepth();
  • this.clear();
  • this.beginFill(this.couleurFond, this.alphaFond);
  • this.lineStyle(this.epaisseurContour, this.couleurContour, this.alphaContour);
  • this.moveTo(0, 0);
  • this.lineTo(0, this._ymouse);
  • this.lineTo(this._xmouse, this._ymouse);
  • this.lineTo(this._xmouse, 0);
  • this.lineTo(0, 0);
  • this.endFill();
  • this.swapDepths(maxDepth);
  • }
  • updateAfterEvent();
  • };
  • }
  • }
  • RectangleSelection(this, "0x00FF00", "0x00FF00", 10, 100, 1);
function RectangleSelection(level, couleurFond, couleurContour, alphaFond, alphaContour, epaisseurContour) {
	if (!level["rectSelect"]) {
		var leClip = level.createEmptyMovieClip("rectSelect", level.getNextHighestDepth());
		leClip.couleurFond = couleurFond;
		leClip.couleurContour = couleurContour;
		leClip.alphaFond = alphaFond;
		leClip.alphaContour = alphaContour;
		leClip.epaisseurContour = epaisseurContour;
		leClip.onMouseDown = function() {
			this._x = _root._xmouse;
			this._y = _root._ymouse;
			this.click = true;
		};
		leClip.onMouseUp = function() {
			this.clear();
			this.click = false;
		};
		leClip.onMouseMove = function() {
			if (this.click) {
				var maxDepth = this._parent.getNextHighestDepth();
				this.clear();
				this.beginFill(this.couleurFond, this.alphaFond);
				this.lineStyle(this.epaisseurContour, this.couleurContour, this.alphaContour);
				this.moveTo(0, 0);
				this.lineTo(0, this._ymouse);
				this.lineTo(this._xmouse, this._ymouse);
				this.lineTo(this._xmouse, 0);
				this.lineTo(0, 0);
				this.endFill();
				this.swapDepths(maxDepth);
			}
			updateAfterEvent();
		};
	}
}
RectangleSelection(this, "0x00FF00", "0x00FF00", 10, 100, 1);


 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

16 juillet 2005 13:32:08 :
J'ai modifié la cadence de l'animation (30 ips)et j'ai un peu optimisé le code.
16 juillet 2005 15:31:11 :
J'ai retouché le code en fonction des commentaires...maintenant c'est presque parfait.
17 juillet 2005 23:18:43 :
ajout de la fonction updateAfterEvent()! ;)
18 juillet 2005 16:50:16 :
J'ai modifié le code cette fois-ci le updateAfterEvent() fonctionne...
18 juillet 2005 21:25:51 :
...
19 juillet 2005 13:27:47 :
finalisation grâce à top30!
19 juillet 2005 13:28:03 :
finalisation grâce aux commentaires!

 Sources de la même categorie

Source avec Zip CLASS IMAGE ET IMAGEEVENT par top30
Source avec Zip Source avec une capture MENU DÉFILANT par m1le
Source avec Zip Source avec une capture MENU SIMPLE STYLE IPHONE par frazeks1989
Source avec Zip Source avec une capture MENUS DÉROULANT XML par Speedy321
Source avec Zip MENU RETATION par habibcode

 Sources en rapport avec celle ci

Source avec Zip ZOOM SUR UNE IMAGE par yasdar
Source avec Zip Source avec une capture SELECTION MULTIPLE par libertyblood
ZOOM SUIVANT LA SOURIS par stown

Commentaires et avis

Commentaire de pegase31 le 16/07/2005 12:51:29 administrateur CS

Pas mal, mais en plus de 12 img/sec, ça aurait été encore mieux ....

Peg'

Commentaire de michto le 16/07/2005 13:04:53

'lut
Bon exemple de fonction avec paramétres. Trés clair, trés bien. Un p'tit conseil de rien du tout : quand tu teste un booléen (clip) tu peux directement ecrire if(clip) et if(!clip). C'est rien mais ça fait toujours une petite opération en moins ;). Et puis je ne sais absolument pas si ça change quelquechose, mais tu recrées ton mc à chaque mouvement de souris ?? Des avis sur le sujet ?

Sinon, tu appelle ta fonction "RectangleSelection". "RectangleDessiner" ou un nom dans le genre conviendrai mieux (Y a pas vraiment de selection :). Les coordonnées du rectangle dessiné pourrais être la selection par exemple...)

Ciao. Bonne continuation.

Commentaire de Prouprou_Sensei le 16/07/2005 15:18:41

Salut!
Sympa comme code, mais c'est vraix que le createEmptyMovieClip a chaque mouseMove est inutile, il suffit d'utiliser clear() et de creer le clip une fois au premier clique de la souris, ou meme a l'apel de la fonction.
Dans le genre:

function RectangleSelection(profondeur, couleurFond, alphaFond, couleurContour, alphaContour, epaisseurContour) {
        _root.createEmptyMovieClip("rectSelect", profondeur);
ecouteur = new Object();
Mouse.addListener(ecouteur);
ecouteur.onMouseDown = function() {
xMouse = _root._xmouse;
yMouse = _root._ymouse;
clic = true;
};
ecouteur.onMouseUp = function() {
_root.rectSelect.clear();
clic = false;
};
ecouteur.onMouseMove = function() {
if (clic) {
with (_root.rectSelect) {
clear();
beginFill(couleurFond, alphaFond);
lineStyle(epaisseurContour, couleurContour, alphaContour);
moveTo(xMouse, yMouse);
lineTo(xMouse, _root._ymouse);
lineTo(_root._xmouse, _root._ymouse);
lineTo(_root._xmouse, yMouse);
lineTo(xMouse, yMouse);
endFill();
}
}
};
}
RectangleSelection(1, "0x00FF00", 10, "0x00FF00", 100, 1);

Commentaire de apokalypse le 16/07/2005 15:36:59

Merci pour ces précieux conseils, j'ai modifié le code en conséquence. Pour ce qui est du nom de la fonction c'était juste pour être clair quand à l'usage que l'on peut faire de cette dernière. :)

Commentaire de BananaTree le 16/07/2005 19:09:10

slt,

"Pas mal, mais en plus de 12 img/sec, ça aurait été encore mieux ...."

pensez à utiliser updateAfterEvent :
ecouteur.onMouseMove = function() {
        if (clic) {
            with (_root.rectSelect) {
                clear();
                beginFill(couleurFond, alphaFond);
                lineStyle(epaisseurContour, couleurContour, alphaContour);
                moveTo(xMouse, yMouse);
                lineTo(xMouse, _root._ymouse);
                lineTo(_root._xmouse, _root._ymouse);
                lineTo(_root._xmouse, yMouse);
                lineTo(xMouse, yMouse);
                endFill();
            }
        }
updateAfterEvent();
    };

@+ et bon code.

Commentaire de Prouprou_Sensei le 16/07/2005 20:44:05

Le updateAfterEvent() est inutile ici :
Flash ignore les appels à updateAfterEvent qui ne sont pas dans un gestionnaire onClipEvent() ou qui ne font pas partie d'une fonction ou d'une méthode transmise à setInterval().

A tchao !

Commentaire de pegase31 le 16/07/2005 20:49:18 administrateur CS

merci prouprou, il me semblait bien que ça ne passait pas dans ce cas .... mais ça confirme !;)

Peg'

Commentaire de BananaTree le 16/07/2005 20:54:05

dsl, j'oubliais que chez macromedia c'était des cons :

http://livedocs.macromedia.com/flash/mx2004/main_7_2/00001479.html

@++

Commentaire de top30 le 17/07/2005 21:05:50

C'est BananaTree qui a raison !
Passe ton anim en 8 images secondes et vous serez surpris !

Commentaire de Prouprou_Sensei le 17/07/2005 22:32:35

Hé bien justement je suis supris que le updateAfterEvent ne change rien...

Commentaire de apokalypse le 17/07/2005 22:52:29

Bon ce débat est fort interessant mais en ma qualité de newbie en programmation j'aimerai un plus d'information en ce qui concerne ce updateAfterEvent(). J'ai beau lire la doc, je comprends pas à quoi ça sert...

Commentaire de BananaTree le 17/07/2005 23:03:51

slt,

updateAfterEvent() force l'actualisation de l'affichage à l'écran entre deux images.

comme l'annoçait colin Moock, l'intégration de cette fonction aux  evénements sur la classe Mouse à été réalisée avec la version 7 du flash player. (peut être même la version 6.40)

http://livedocs.macromedia.com/flash/mx2004/main_7_2/00001870.html

"This function works only with certain Mouse and MovieClip handlers: the mouseDown, mouseUp, mouseMove, keyDown and keyUp handlers for the Mouse class; the onMouseMove, onMouseDown, onMouseUp, onKeyDown, and onKeyUp handlers for the MovieClip class. It does not work with the Key class."

@++



Commentaire de Prouprou_Sensei le 18/07/2005 00:54:03

En tout cas ici ca ne fonctionne pas... SI ? Parceque j'ai l'impression que le message de top30 etait un "si ca fonctionne !" déguisé ;) ...

Commentaire de top30 le 18/07/2005 12:18:00

Bon je vais vous faire simple. Coller ceci dans un anim à 1 image seconde :

function SelectionRectangular ( level, couleurFond, couleurContour, alphaDivision )
{
// Si le clip de sélection n'existe pas...
if ( !level["__selectionMC__"] ) {

// Le créer à la plus haute profondeur.
var leClip = level.createEmptyMovieClip ( "__selectionMC__", level.getNextHighestDepth() ) ;

// On mémorise les couleurs
leClip.background = couleurFond ;
leClip.border = couleurContour ;
leClip.alpha = alphaDivision ;

// Au click enfoncé
leClip.onMouseDown = function ()
{
this._x = _root._xmouse;
this._y = _root._ymouse;
this.click = true ;
};

// Au click relaché
leClip.onMouseUp = function ()
{
this.clear ();
this.click = false;
};

// Quand la souris bouge
leClip.onMouseMove = function ()
{
if ( this.click ) {
// La plus haute profondeur
var maxDepth = this._parent.getNextHighestDepth() ;
this.clear () ;
this.beginFill ( this.background, 100/this.alpha );
this.lineStyle ( 0, this.border, 100 );
this.moveTo ( 0, 0 );
this.lineTo ( 0, this._ymouse );
this.lineTo ( this._xmouse, this._ymouse ) ;
this.lineTo ( this._xmouse, 0 );
this.lineTo ( 0, 0 );
this.endFill ();
this.swapDepths ( maxDepth ) ;
updateAfterEvent () ;
}
}

// L'écouteur EST le clip de sélection. Pas besoin d 'autre object !!!
Mouse.addListener ( leClip );
};
}
SelectionRectangular ( this, "0xFF6600", "0xFF0000", 5 );

C'est FLUIDE !!!!!

De plus IL FAUT BIEN REPLACERle clip à chaque instant. N'oublier pas que son script doit être réutilisable. Par conséquent on pourrait avoir un clip SOUS la sélection et un autre SUR, des clips pouvant être créer à tout instant. Il faut bien que la sélection soit TOUJOURS ou en DESSOUS ou au DESSUS ( le cas de cet exemple ), et donc replacer le clip à la bonne profondeur à chaque instant.

Voilà j'espeère que ca éclairera la lanterne de certain...
5/10] car ca méritait certaines améliorations.

A plus.

Commentaire de Prouprou_Sensei le 18/07/2005 12:50:41

D'accord ce qu'il fallait preciser c'est que le updateAfterEvent ne fonctionne qui si le clip est lui meme l'ecouteur de l'evenement.

Merci top30!

A tchao !

Commentaire de apokalypse le 18/07/2005 13:35:25

Merci beaucoup top30 mais ca sert à rien de s'enerver! ;)
5/10 --> c'est plutôt bien pour une première source! ;)
a+

Commentaire de Prouprou_Sensei le 18/07/2005 13:49:40

apokalypse fait attention tu as ajouté le updateAfterEvent mais pas comme il le fallait, ta version ne fonctionne pas, car il faut que le clip soit lui-meme l'ecouteur pour les evenements comme a fait top30 !

A tchao !

Commentaire de apokalypse le 18/07/2005 16:55:31

Bon j'ai modifié mais j'ai pas recopié le code de top30 étant donné que j'aurai jamais pu coder comme ça...donc pour une version améliorée se référer au code de top30! ;)
a+

Commentaire de BananaTree le 18/07/2005 17:31:04

"il fallait preciser c'est que le updateAfterEvent ne fonctionne qui si le clip est lui meme l'ecouteur de l'evenement"

Certes.
Ce que je propose, c'est de supprimer cette ligne ;) :
Mouse.addListener ( leClip );

Par contre faites gaffes à un petit truc :
updateAfterEvent se comporte quasiment comme onEnterFrame. il convient donc de ne pas effectuer deux updateAfterEvent pour un même évènement (comme par exemple on peu faire appel par inatention à deux _root.onEnterFrame() placé à des endroits différents du scénario).

Sinon, gâre aux saccades ...

l'utilisation de setInterval et des évènements de souris permet d'éliminer toutes références à la fonction onEnterFrame. de fait, pour la fluidité, on n'est plus limité que par le taux de chargement du processeur.

comme me l'a fait remarqué top 30 en son temps : "j'ai du relire au moins 3 ou 4 fois la doc de flash..." .

alors n'hésitez pas à zieuter la livedoc de macromedia, même si elle est en anglais, c qd même ce qui se fait de mieux.

@+ et bon code.

Commentaire de top30 le 18/07/2005 17:39:05

Sont tétus les jeunes !!!!
Si tu laisses ton code comme ceci, si tu charges un niveau, le niveau sera AU DESSUS de ta selection et tu ne pourras rien faire. Sauf peut être reprogrammer ta fonction comme je te l'ai dit avec le clip de destination comme paramètre...

De plus je m'ennerve pas, mais suis un grand adepte des points d'exclamations ( Et oui comme la vie !!! )

Bananatree, si tu fais sauter le "addListener(leClip)" en 1 image/seconde, tu perdras la fluidité. Tu devrais savoir que quand j'affirme, c est que j'ai testé ! ;D   Teste le donc toi même...

Commentaire de BananaTree le 18/07/2005 18:07:58

Persiste et signe ;)

essaye plutot ça ( pour que le rafraichissement ne tiennent plus compte de l'état enfoncé) :

function SelectionRectangular(level, couleurFond, couleurContour, alphaDivision) {
// Si le clip de sélection n'existe pas...
if (!level["__selectionMC__"]) {
// Le créer à la plus haute profondeur.
var leClip = level.createEmptyMovieClip("__selectionMC__", level.getNextHighestDepth());
// On mémorise les couleurs
leClip.background = couleurFond;
leClip.border = couleurContour;
leClip.alpha = alphaDivision;
// Au click enfoncé
leClip.onMouseDown = function() {
this._x = _root._xmouse;
this._y = _root._ymouse;
this.click = true;
};
// Au click relaché
leClip.onMouseUp = function() {
this.clear();
this.click = false;
};
// Quand la souris bouge
leClip.onMouseMove = function() {
if (this.click) {
// La plus haute profondeur
var maxDepth = this._parent.getNextHighestDepth();
this.clear();
this.beginFill(this.background, 100/this.alpha);
this.lineStyle(0, this.border, 100);
this.moveTo(0, 0);
this.lineTo(0, this._ymouse);
this.lineTo(this._xmouse, this._ymouse);
this.lineTo(this._xmouse, 0);
this.lineTo(0, 0);
this.endFill();
this.swapDepths(maxDepth);
}
updateAfterEvent();
};
}
}
SelectionRectangular(this, "0xFF6600", "0xFF0000", 5);

@+ et bon code



Commentaire de top30 le 18/07/2005 18:15:44

Convaincu et bien vu  =D
J'avais oublié que l'écouteur était un "moviClip" et non un "object" ( alors que ce fut mon conseil !!! ) et par conséquent qu'il possédait un Event "onMouseMove"...

PS :
Allez voir cette source ca pourrait aider les plus "pointus" :
http://www.flashkod.com/code.aspx?ID=32775

Commentaire de BananaTree le 24/08/2005 00:32:49

pour ceux que ça amuse j'ai fais ce truc pour tester une de mes classes (http://www.bananatree.fr/swing/) :
//-------
import org.flashapi.swing.draw.DashedLines;
var grayDottedLine:Object = {width:0.5, height:0.5, color:0x000000, alpha:100, delay:1.5};
function drawSelectArea(clip, initX, initY) {
clip.onMouseMove = function() {
this.clear();
DashedLines.drawRectangle([initX, initY], [this._xmouse, this._ymouse], this, grayDottedLine);
updateAfterEvent();
};
clip.onMouseUp = function(idInterval) {
clearInterval (selectRect);
delete clip.onMouseMove;
this.clear();
};
}
this.onMouseDown = function() {
var initX = this._xmouse;
var initY = this._ymouse;
_global.selectRect = setInterval(drawSelectArea, 10, this, initX, initY);
};
//----

@+ et bon code

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Une zone de texte pas rectangle ? [ par KiRkOUiLLe ] Bonjour à tous :)Je vous explique ce que je recherche.en fait j'aimerais savoir s'il est possible de définir une zone de texte dynamique qui ne soit p Incorporer un swf dans une zone délimitée [ par Auklaar ] Bonjour à tous ! Voila je vous expose mon problème, je ne connais pas grand chose à l'actionscript et après de nombreuses recherches infructueuses je bouton [ par loblobloblob ] Bonjour,je cherche a fiare un cache pour délimiter une zone sur un bouton car mon bouton est un texte et il faut visé précisémentles lettres pour l'ac Sélection rectangle AS3 [ par egrenier ] Bonjourje programme depuis peu et j'ai voulu adapter en AS3 le code AS2 du rectangle de sélection d'< probléme bouton [ par loblobloblob ] Bonjour,j'aimerais faire un menu déroulant dans flash pour un site internet,j'ai donc créer un bouton qui me renvoi autre par sur la scène pour que mo C'est impossible de modifier les urls [ par foxius ] j'ai une bannière.swf que je désire modifier les url pour chaque bouton des 6 boutons de la bannière. sachant que je travaille avec sothink swf quicke Afficher un texte ou un image sur la même page que mon menu [ par pierards ] Bonjour!Je débute le flash depuis deux jours seulement. J'ai compris pas mal de choses grâce à différents tutos sur flashkod et je remercie tout le mo Retirer le fond d'un bouton flash [ par nico2rib ] Salut, J'ai créer un bouton avec animation mais j'ai un ptit probleme. il se trouve que lorsque j'enregistre mon bouton en .swf, le fond blanc sur le Mon swf ne se lit pas dans mon animation. [ par ptitvincent ] Bonjour à tous, J'ai réalisé, à l'aide de ce tuto : http://www.computerarts.co.uk/tutorials/premium_content/web__and__new_media/create_imagery_using_ zone de texte,XML,nodes... [ par Homeros ] Bonjour, j'ai une application qui charge les données d'un fichier XML, mais les données s'affichée dans le même zone de txt est se que je veux, c'est


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,217 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales