Blocage StartDrag a une zone

Résolu
Signaler
Messages postés
212
Date d'inscription
mardi 2 novembre 2004
Statut
Membre
Dernière intervention
12 mai 2008
-
Messages postés
1378
Date d'inscription
samedi 9 octobre 2004
Statut
Membre
Dernière intervention
1 novembre 2010
-
Salut tout le monde



Bon, tout d'abord, si ma question se trouve deja posee et resolue dans
un autre topic ou dans une source, bhein suffit de me dire ou je peux
la trouver ^^ ... j ai regarde, mais j ai pas trouve ( mais comme le
moteur de recherche depent du titre ... suffit que je sois passe a cote
sans le voir )



Alors ma question est simple ( il me semble ) :



J'ai un bouton que je drag avec la fonction startDrag() dans un onPress et un stopDrag() dans un onRelease. Jusque la ca va.

Ce que j aimerais c pouvoir non pas lui dire dans quelle zone on peut
deplacer l'objet ( comme c bien expliqué dans l aide ) mais de lui
spécifier la zone ou il ne peut pas aller !

En fait, mon ecran pourrait etre divise en 9carres, et j aimerais que
celui du milieu soit inaccessible. Qu on ne puisse pas l atteindre en
dragant le bouton. Vous voyez ?



J ai essaye de regarde dans l aide, mais j ai pas trouve, j ai essaye en bidouillant en utilisant des conditions du type :

Si mon bouton se trouve dans le carre en haut a gauche alors tu l
empeches d aller dans le carre central ( le carre etant specifie dans
les valeurs gauche droite haut bas du startDrag ... )



Ca donne un truc comme ca :



bouton.onPress = function(){

if(bouton._x<10 && bouton._y<10){

startDrag(this, false, 0, 0, 10, 10);

}else{

if(bouton._x>10 && bouton._y<10){

startDrag(this, false, 10, 0, 20, 10);

}

}

}



Enfin, j ai remis grosso modo parce que de toute facon ca ne convient
pas. En effet : j obtiens bien le blocage du carre central, mais du
coups je suis oblige de relache le bouton de la souris pour passer dans
un carre suivant ...



Ce que j aimerais c qu on puisse drager le bouton et le faire se
deplacer partout sauf dans une zone que je lui aurais specifier ...



Si c pas clair, vous le dites et je reexplique ...



Toutes idees sont les bien venues ... un grand merci a toutes les reponses et a leur auteurs



Darkrats



PS : si le topic est pas au bon endroit, vous le dites et je le change parce que la je savais pas trop ou le caser

3 réponses

Messages postés
212
Date d'inscription
mardi 2 novembre 2004
Statut
Membre
Dernière intervention
12 mai 2008
1
Merci beaucoup, ...



Raaah j arrive pas a croire que j avais oublie cette solution ( le pire c que je l utilise EN PLUS deja pour faire un curseur personnalise ... j ai hooonte j aurais du core attendre un peu avant de poster )



Enfin pour ma defence, j avais espere trouve une solution peut etre plus legere en calcul processeur ... enfin



En tout cas, merci bcp pour cette reponse simple et rapide ... et merci
pour la remarque, c vrai que je ne pense jamais a cette astuce ^_^



Prochaine fois c est promis, je reflechirai core un jour de plus avant d avoir recours au forum



Sur ce ... au boulot
Messages postés
1378
Date d'inscription
samedi 9 octobre 2004
Statut
Membre
Dernière intervention
1 novembre 2010
1
LE PLUS SIMPLE.......

N'utilise pas starDrag();
Utilise pour ton bouton un gestionnaire : onEnterFrame();
En mettant par exemple comme code :

bouton.onEnterFrame=function()
{

if !( ICI TOUTE TES LIMITES QU'IL NE FAUT PAS DEPACER )
{
this._x=_root._xmouse;
this._y=_root._ymouse;
//pour imiter le starDrag
}

}

C'est-à-dire à chaque cycle, si ton bouton n'as pas dépassé une de tes limites que tu as identifiée dans ton if()
Eh bien les coordonnées du bouton seront les même que celui de la souris....comme un starDrag();
REMARQUE bien le point d'intérrogation avec le if, c'est pour donner la condion contraire...

Voilà, j'espère que cela t'aidera.

Bon courage!

PS : exemple de condition : carré de 200*200 , de coord. (300,200)
par rapport au _root ( pour un doc. de 600*400...........)

bouton.onEnterFrame=function()
{

if !( (bouton._x<150 && bouton._x>350)
&& (bouton._y<100 && bouton._y> 300) )
{
this._x=_root._xmouse;
this._y=_root._ymouse;
//pour imiter le starDrag
}

}
Messages postés
1378
Date d'inscription
samedi 9 octobre 2004
Statut
Membre
Dernière intervention
1 novembre 2010
1
Je c , cjhte compren, moi ossi , pour une condition de + jdevient dingue, alors ke lé processeurs font des millions de calcul par seconde....lol
Toujours à vouloir optimiser le code...
Nen mais je ne pense pas que la fonction starDrag soit ossi légère que mon code........C'est juste qu'elle appelle une fonction par une seule ligne de code...