flash: modification origine (zero/zero)

Tiri

Membre actif
26 Avril 2003
200
2
bonjour à tous,
question bête:

comment faire pour modofier la position du x=0 et y=0 dans flash. par défault il est toujours en haut à gauche de l'animation. comme j'ai trouvé un petit actionscript qui me permet de zoomer dans le graphisme, celui zoom toujours vers en haut à gauche (au lieu du centre).

dans illustrator il suffit de prendre le coin entre les règles x/y et le tirer dans la feuille, pratique qui ne marche malheureusement pas dans flash.

quelqu'un a une idée?

merci
 
salut :)

Si ton problème c'est que le clip s'agrandit à partir du coin supérieur gauche au lieu de ce que tu veux, c'est à dire un agrandissement à partir du centre, il y a deux solutions :

- soit ton clip est fait en dur à la main dans flash, alors tu peux en déplacer le centre de rotation avec l'outil "Q" (désolé j'ai pas flash là, je me souviens que du raccourci...)

- soit ton clip est généré par actionscript, et là, il faut te débrouiller pour centrer à la main en retranchant la moitié de la largeur du clip à sa position en _x, et la moitié de la hauteur du clip à sa position en _y.


D'autres problèmes de déplacement d'origine se résolvent avec localToGlobal et globalToLocal, mais j'ai pas l'impression que ce soit le cas ici. Essaies de décrire un peu mieux ton problème. Si tu peux envoyer un fla, ou poster le code, ce sera bien plus facile de te dire que faire.
 
  • J’aime
Réactions: Tiri
il s'agit de petits action script type:

on (release) {
_root.plan._height=_root.plan._height +20
_root.plan._width=_root.plan._width +20
}

pour le zoom, en effet je pourrais faire un calcul savant x/y en fonction de la largeur de l'animation pour positioner le centre non?

2ème question:
quand j'importe cette animation dans une autre animation flash, les boutons ne resten pas actif! est-ce normal? dois-je importer toute la scène ou puis-je juste importer l'animation en swf dans ma bibliotheque comme objet (mais comment faire pour que les boutons restent actifs?)?

merci de votre aide
 
Tiri a dit:
pour le zoom, en effet je pourrais faire un calcul savant x/y en fonction de la largeur de l'animation pour positioner le centre non?
ben le calcul est pas si savant que ça... dans ton exemple ça donne :

on (release) {

var agrandissement = 20;

_root.plan._height += agrandissement;
_root.plan._width += agrandissement;

_root.plan._x -= agrandissement/2;
_root.plan._y -= agrandissement/2;

}


avec quelques corrections de style en plus ;) ...

Tiri a dit:
2ème question:
quand j'importe cette animation dans une autre animation flash, les boutons ne resten pas actif! est-ce normal? dois-je importer toute la scène ou puis-je juste importer l'animation en swf dans ma bibliotheque comme objet (mais comment faire pour que les boutons restent actifs?)?
ça c'est parce qu'il y a des _root dans ton code.

Quand tu load ton swf dans un autre, _root, c'est le root du swf qui load, pas celui que tu veux en fait.

Il y a plusieurs solutions pour remédier à ça :

1 - coder plutôt avec des this et des _parent qu'en appelant _root. Jamais appeler _root d'ailleurs, mais bon si tes scripts sont déjà faits c'est chiant de tout reprendre

2 - il y a une propriété qui s'appelle _lockRoot (je suis pas sûr de la syntaxe) et qui permet de forcer le _root d'un swf chargé dans un autre à pointer où il faut.

3 - Si lockRoot te plait pas, tu peux le faire à la main, en mettant juste ça sur ta toute première image :

_global.monRoot = this;

puis ensuite il faut remplacer tous les _root par des _global.monRoot dans ton code.
 
t'as tout à fait raison. mais on triturant le truc j'ai remarqué quelque chose: on peut pas faire des additions et substractions pour le zoom et dezoom, faut faire des multiplications et divisions car le rapport hauteur/largeur est modifié sur un rectangle. alors j'ai modifié le script comme suit (excuse les fautes de style, je suis un débutant en actionscript):

on (release) {

var lbase = _root.plan._width; hbase = _root.plan._height;

_root.plan._height *= plan:agrandissement;
_root.plan._width *= plan:agrandissement;

_root.plan._x -= (_root.plan._width - lbase)/2;
_root.plan._y -= (_root.plan._height - hbase)/2;
}


pour le problème du root, effectivement ca me semble logique comme explication. je suis dessus...
 
hello encore moi,
je travaille toujours sur le script du zoom et dezoom. j'ai ajouté une fonction qui permet a déplacer le plan à l'aide de la souris.
mon problème est toujours lié au zoom: effectivement en faisant le zoom actuellement il ne zoom pas vers le coin haut à gauche mais vers le centre de l'image. c'est déjà bien.

comment faudrait-il faire pour, au lieu de zoom vers le centre de l'image (occurence), que le zoom se fasse vers le centre de la fênetre de vue (masque). ceci permettrait de zoomer sur les bords de l'image (occurence).
je pense qu'il faudrait faire un calcul entre le centre de l'image (occurence) et le centre de la fenêtre et faire un déplacement.
j'ai passé pas mal de temps la dessus mais encore sans succès.

le script du zoom est actuellement comme-ceci:

on (release) {

var lbase = _global.monRoot.plan._width; hbase = _global.monRoot.plan._height;

_global.monRoot.plan._height *= plan:agrandissement;
_global.monRoot.plan._width *= plan:agrandissement;

_global.monRoot.plan._x -= (_global.monRoot.plan._width - lbase)/2;
_global.monRoot.plan._y -= (_global.monRoot.plan._height - hbase)/2;
}


obi wan, qu'en pensu-tu?
 
j'ai trouvé la solution pour le zoom:

on (release) {


_global.monRoot.plan._height *= plan:agrandissement;
_global.monRoot.plan._width *= plan:agrandissement;

_global.monRoot.plan._x -= (plan:agrandissement-1)*(-(_global.monRoot.plan._x)+plan:lfen/2);
_global.monRoot.plan._y -= (plan:agrandissement-1)*(-(_global.monRoot.plan._y)+plan:hfen/2);
}


// plan:agrandissement = facteur d'agrandissement
// plan:lfen = largeur de la fenêtre

voilà. suis en train d'étudier le dézoom...
 
pour ceux que ca intéresse, voici le script du zoom arrière:

on (release) {

if (_global.monRoot.plan._width > plan:lfen) {

_global.monRoot.plan._height /= plan:agrandissement;
_global.monRoot.plan._width /= plan:agrandissement;

_global.monRoot.plan._x += (1-1/(plan:agrandissement)) * ((-_global.monRoot.plan._x) + (plan:lfen / 2));
_global.monRoot.plan._y += (1-1/(plan:agrandissement)) * ((-_global.monRoot.plan._y) + (plan:hfen / 2));

}
else {
}

}
 
oui exact, d'après ce que je sais, par ex plan:agrandissement permet de référencer "agrandissement" à l'occurence plan.
 
oula :)

j'ai bien fait de te demander la précision... il faut absolument éviter ça. Tu te plantes complètement dans ce que signifie typer les variables.

Je comprends pas comment le compilateur de macromedia peut laisser passer ça (ah si je sais en fait, c'est de la d****... MTASC poweeerrr :D)


Commence par un petit coup de google à propos du typage des variables.

Quand tu tapes plan:agrandissement, tu sous-entends qu'il existe une classe agrandissement et que plan en est une occurence.
Le typage de variable et les classes, c'est en AS2, et là tu codes en AS1 (direct dans les clips en plus), alors tu n'as pas besoin de typer tes variables... tu as même le droit de faire du transtypage de porc à la serpette, ça fonctionnera.