DOUBLE CLICK >>> SIMPLE, RAPIDE, EFFICACE

Blacknight91titi Messages postés 1732 Date d'inscription jeudi 17 juin 2004 Statut Membre Dernière intervention 9 mars 2015 - 22 mars 2006 à 22:30
manoloz Messages postés 26 Date d'inscription mardi 13 avril 2004 Statut Membre Dernière intervention 27 septembre 2006 - 30 mars 2006 à 09:50
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/36663-double-click-simple-rapide-efficace

manoloz Messages postés 26 Date d'inscription mardi 13 avril 2004 Statut Membre Dernière intervention 27 septembre 2006
30 mars 2006 à 09:50
wé, g vu :->
je parlais juste pour top30,le sien il le fé pas
Et pis je préfere un clique de bouton qu' un hitTest..
" ça laisse les events mouse du clip libres" ...
Ben c pa grave, je trouve, de toute façon le clip que je veux créer n'aura que le double clique comme role dans sa vie, je vais pas lui créer mille fonctions par clique.
Blacknight91titi Messages postés 1732 Date d'inscription jeudi 17 juin 2004 Statut Membre Dernière intervention 9 mars 2015 2
30 mars 2006 à 07:55
Et bien dans l'avant dernier message que j'ai poster le code le fait aussi, essai tu verra.
Pas encore tester le code de Top30

Blacknight
manoloz Messages postés 26 Date d'inscription mardi 13 avril 2004 Statut Membre Dernière intervention 27 septembre 2006
29 mars 2006 à 22:40
g mis 500ms pour bieeeeen voir ce qui se passe
manoloz Messages postés 26 Date d'inscription mardi 13 avril 2004 Statut Membre Dernière intervention 27 septembre 2006
29 mars 2006 à 22:40
hum, bravo... super code...
Mais je vais vous taper sur les doigs, j'ai dit,
MON CODE RECONNAIT LE DOUBLE CLIQUE ET NON LE TRIPLE CLIQUE.

c à d que le 3 eme clique redevient un siple click, et on voit pas "DoubleClick effectué " qui saute à la figure.

J'ai donc rajouté la variable
firstclick à ton truc (et g enlevé aussi l'alerte "simpleclick" qui était un peu enervant:



new DoubleClick ( unClip, 500 ) ;

unClip.onDoubleClick = function( time )
{
trace ( "DoubleClick effectué en " + time + " ms" ) ;
}
//
function DoubleClick ( mc, delay )
{
var o = {} ;
o.onMouseDown = function ()
{
if ( mc.hitTest(_root._xmouse,_root._ymouse,true) )
{
this.time = getTimer() ;
this.delay = this.time-this.reset ;
//
if(( this.delay < delay )and !this.firstclick){
mc['onDoubleClick']( this.delay ) ;
this.firstclick=true;
}
else this.firstclick=false;
//
this.reset = getTimer() ;
}
}
Mouse.addListener( o ) ;
}
top30 Messages postés 1158 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 6 août 2010
27 mars 2006 à 21:15
Sur une scene vous mettez un clip appellé "unClip". Puis dans la frame 1 ceci :
//
new DoubleClick ( unClip, 250 ) ;
//
unClip.onMouseDown = function( time )
{
trace ( "Simple onMouseDown" ) ;
}

unClip.onDoubleClick = function( time )
{
trace ( "DoubleClick effectué en " + time + " ms" ) ;
}
//
function DoubleClick ( mc, delay )
{
var o = {} ;
o.onMouseDown = function ()
{
if ( mc.hitTest(_root._xmouse,_root._ymouse,true) )
{
this.time = getTimer() ;
this.delay = this.time-this.reset ;
//
if( this.delay < delay ) mc['onDoubleClick']( this.delay ) ;
//
this.reset = getTimer() ;
}
}
Mouse.addListener( o ) ;
}

C'est tout !!!
Pas d'interval, pas de onRelease, et ca laisse les events Mouse du clip libres...
Blacknight91titi Messages postés 1732 Date d'inscription jeudi 17 juin 2004 Statut Membre Dernière intervention 9 mars 2015 2
26 mars 2006 à 22:36
Oui je sais bien, mais pour la variable verif ce n'est pas nécéssaire, vu qu'elle n'est pas déclaré avant elle est déja sur false par défaut.
Ensuite pour time ce n'est pas non plus important puisqu'elle est définit après.
La condition juste avant ?
Et bien vu qu'il s'agit forcement du premer clic il n'y a pas besoin de la définir, la condition renvera forcement false la première fois, et la variable est définit après donc pas de soucis.
Sa fait 2 lignes de moin ;)
Merci quand même pour ta corection Bali_Balo (même s'il elle n'est pas vrament nécéssaire)

Blacknight
cs_bali_balo Messages postés 1378 Date d'inscription samedi 9 octobre 2004 Statut Membre Dernière intervention 1 novembre 2010 1
26 mars 2006 à 20:42
Tu oublis d'initialiser tes variables blacknight91titi...( enfin je sais que c'est trivial, mais il y en a qui ont du écrire ton code sans en prendre compte )


frame 1 :
Interval = 200;
time = 0;
verif = false;

code bouton :
on(press) {
if (getTimer() < time+Interval && verif) {
trace("double click");
verif = false;
} else {
verif = true
}
time = getTimer();
}


bali_balo....=]
Blacknight91titi Messages postés 1732 Date d'inscription jeudi 17 juin 2004 Statut Membre Dernière intervention 9 mars 2015 2
26 mars 2006 à 17:48
Bin regarde (quelques lignes de plus) :

frame 1 :
Interval = 200;
bouton :
on(press) {
if (getTimer() < time+Interval && verif) {
trace("double click");
verif = false;
} else {
verif = true
}
time = getTimer();
}

C'est mieux la ?
manoloz Messages postés 26 Date d'inscription mardi 13 avril 2004 Statut Membre Dernière intervention 27 septembre 2006
26 mars 2006 à 13:23
Allez, il é bien mon code! lol je v pa lacher l'affaire
manoloz Messages postés 26 Date d'inscription mardi 13 avril 2004 Statut Membre Dernière intervention 27 septembre 2006
26 mars 2006 à 13:20
huhu, il y'a un cas que je n'ai pas dit, mais qui est important, et que j'ai traité dans mon code.

J'ai utilisé setInterval et ClearInterval, car il permet de stopper la "surveillance" de l'arrivée dun 2è click..
pour etre plus clair, mon code gere le double clique, et j'ai fait gaffe à ce qu'il ne voie pas le TRIPLE CLIQUE, ni le quatruple, etc...

Si je comprends bien ton code:
on(press) {
if (getTimer() < time+Interval) {
trace("double click");
}
time = getTimer();
}
il suffit qu'apres le 2è clique, j'appuie encore une fois assez vite ( <200ms) et il va encore me sortir que c'est un "double click"

La variable global_firstclick dans mon code permet d'annuler le chrono si un 2è clique a été fait.
Sinon, j'aurais fait un code bien plus court, meme avec SetInterval
Blacknight91titi Messages postés 1732 Date d'inscription jeudi 17 juin 2004 Statut Membre Dernière intervention 9 mars 2015 2
26 mars 2006 à 13:05
Non sa ralentira pas si le getTimer grandit, en tout cas sa ne se vera pas, les processeurs actuel sont bien assez puissant pour sa.

Juste que mon code est tout de même un peu plus cours et y a besoin que de deux variables

Simple, rapide, efficace ;)

Blacknight
manoloz Messages postés 26 Date d'inscription mardi 13 avril 2004 Statut Membre Dernière intervention 27 septembre 2006
26 mars 2006 à 12:40
>>>hé , Blacknight91titi, g pas testé mais ça m'a lair très logique ton code, ça devrait marcher.

C juste que, ce que j'aime pas dans le getTimer() c qu'il va prendre des valeurs de plus en plus grandes, lorsque l'utilisateur est sur l'animation depuis longtemps.
Bon, si ça prend pas plus de ressources que le setInterval()...
( + clearInterval :-p en plus ! hehe)
EN passant, j'ai sorti ce code car j'en ai vu un autre qui a fait pire, son programme prend 2 pages, c sur flashkod en plus
iceage Messages postés 7 Date d'inscription mardi 19 avril 2005 Statut Membre Dernière intervention 11 mai 2007
24 mars 2006 à 10:34
Je cherchais justement un code simple et efficase pour le double clic...

ice
cs_bali_balo Messages postés 1378 Date d'inscription samedi 9 octobre 2004 Statut Membre Dernière intervention 1 novembre 2010 1
22 mars 2006 à 22:34
Oui, j'oubliais aussi l'optimisation du code...
Pas trop fait attention...xD
cs_bali_balo Messages postés 1378 Date d'inscription samedi 9 octobre 2004 Statut Membre Dernière intervention 1 novembre 2010 1
22 mars 2006 à 22:33
Je crois que mes futures sources vont plus être orientées 'astuces' que super grosses application!

J'ai plein de ptites astuces que j'aimerais partager avec les autres développeur.

Original comme idée.


bali_balo....=]
cs_bali_balo Messages postés 1378 Date d'inscription samedi 9 octobre 2004 Statut Membre Dernière intervention 1 novembre 2010 1
22 mars 2006 à 22:33
Je crois que met futures sources vont plus être orientées 'astuces' que super grosses application!

J'ai plein de ptites astuces que j'aimerais partager avec les autres développeur.

Original comme idée.


bali_balo....=]
Blacknight91titi Messages postés 1732 Date d'inscription jeudi 17 juin 2004 Statut Membre Dernière intervention 9 mars 2015 2
22 mars 2006 à 22:30
Je pense que tu t'embète pour rien :
frame 1 :
Interval = 200;
bouton :
on(press) {
if (getTimer() < time+Interval) {
trace("double click");
}
time = getTimer();
}

J'ai tester, aucun problème.

Blacknight
Rejoignez-nous