REDIMENSIONNER ET TOURNER UN CLIP A L'AIDE DES FLECHES
pegase31
Messages postés6138Date d'inscriptiondimanche 21 décembre 2003StatutModérateurDernière intervention 4 septembre 2013
-
14 mars 2008 à 14:33
otomat
Messages postés21Date d'inscriptionlundi 24 septembre 2007StatutMembreDernière intervention30 janvier 2010
-
17 mars 2008 à 23:39
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
otomat
Messages postés21Date d'inscriptionlundi 24 septembre 2007StatutMembreDernière intervention30 janvier 2010 17 mars 2008 à 23:39
bah alors la j'avoue ne pas avoir le niveau m'autorisant a juger d'esthetique en ce qui concerne la programmation.
Ton code est simple, complet et efficace:adopté. La variable de stockage est vraiment une bonne idee dont je prends note. Ca devrait pouvoir me simplifier pas mal de choses.
Merci Slagt
J'aurais pas fait exactement comme ça, mais ton truc marche bien. Quoi que je trouve ça plutot moche de déclarer un keyListener dans un mouseListener, mais bon, les goûts et les couleurs...
Dans le code qui suit, il faut placer sur la scène un clip "monMc".
Ensuite, tu peux rajouter autant de clip que tu veux, ça marchera, du moment que tu leur attribue le même onPress et le même onRelease, le dernier clip sur lequel tu as cliqué étant stocké dans la variable CLIP.
==================
var CLIP:MovieClip;
monMc.onPress = function ()
{
CLIP = this;
startDrag (CLIP, false);
}
monMc.onRelease = function ()
{
stopDrag();
}
var EC:Object = new Object();
EC.onKeyDown = function ()
{
if (!CLIP)
return;
if (Key.isDown(Key.LEFT))
{
CLIP._rotation -= 5;
}
else if (Key.isDown(Key.RIGHT))
{
CLIP._rotation += 5;
}
J'ai rajouté le code empêchant d'avoir un _xscale/_yscale négatif.
otomat
Messages postés21Date d'inscriptionlundi 24 septembre 2007StatutMembreDernière intervention30 janvier 2010 16 mars 2008 à 14:04
c'est nickel Slagt
voici le code pour le gars ou la gazesse qui comme moi aurait mal lu la notice, on peut y rajouter une condition pour eviter la symetrie lorsque num devient negatif :
plasrou_mc.onPress = function() {
this.startDrag(false);
};
plasrou_mc.onRelease = function() {
this.stopDrag();
};
var num:Number = 100
var mouseListener:Object = new Object();
mouseListener.onMouseUp = function():Void {
if (plasrou_mc.hitTest(_xmouse, _ymouse)) {
var keyListener:Object = new Object();
keyListener.onKeyDown = function() {
if (Key.isDown(Key.LEFT)) {
plasrou_mc._rotation -= 5;
} else if (Key.isDown(Key.RIGHT)) {
plasrou_mc._rotation += 5;
} else if (Key.isDown(Key.UP)) {
num += 10
plasrou_mc._xscale = num;
plasrou_mc._yscale = num;
trace(plasrou_mc._width);
trace(plasrou_mc._height);
} else if (Key.isDown(Key.DOWN)) {
num -= 10
plasrou_mc._xscale = num;
plasrou_mc._yscale = num;
}
};
}
Key.addListener(keyListener);
};
Mouse.addListener(mouseListener);
otomat
Messages postés21Date d'inscriptionlundi 24 septembre 2007StatutMembreDernière intervention30 janvier 2010 16 mars 2008 à 13:41
Merci Slagt.
Je vais essayer avec _xscale et _yscale et si ca marche, tant mieux. Apparament ca devrait le faire vu que ces instruction sont en pourcentage.
C'est d'ailleurs un peu pour cette raison que j'avais publie cette source, ca me semblait un peu trop b... et j'avais aucun retour sur le forum. En attendant, j'ai appris quelques trucs sur l'utilisation de matrix.
Bref mieux vaut bien relire la notice et trouver la bonne instruction avant de se lancer.
Nan nan, utilise PAS _width et _height ! Le moins possible en fait !
Pour toi, y a quelque chose de beaucoup mieux, c'est _xscale et _yscale. L'avantage, c'est que ce nombre peut être négatif, et inverse la forme dans ce cas. L'autre avantage, c'est que tu n'as pas besoin de calculer le rapport à chaque fois entre les largeur et hauteur. Si tu veux diviser par deux la taille, tu mets _xscale et _yscale à 50. Tout simplement (50%).
Si tu veux faire une symétrie horizontale, tu mets _xscale à -100.
Voilà le genre de truc qu'on peut faire :)
otomat
Messages postés21Date d'inscriptionlundi 24 septembre 2007StatutMembreDernière intervention30 janvier 2010 15 mars 2008 à 16:59
on peut rajouter un indice pour le cas ou le clip est inscrit dans un rectangle mais c'est moins clean que l'utilisation de mon baz...
otomat
Messages postés21Date d'inscriptionlundi 24 septembre 2007StatutMembreDernière intervention30 janvier 2010 15 mars 2008 à 00:54
Le code avec _rotation, _height, _widht est super simple mais par contre ca engendre des deformations sur les formes complexes que j'utilise, mais ya surrenment une ruse sans avoir besoin de mon bazooka a mouches
otomat
Messages postés21Date d'inscriptionlundi 24 septembre 2007StatutMembreDernière intervention30 janvier 2010 15 mars 2008 à 00:30
Ah oui ca ferait un truc tres simple c'est vrais, mais comme je l'ai dit plus haut...
Bon ben comme vous etes deux super pros donnez moi de bons coneils sur un site que je fais en flash, enfin si vous voulez.
c'est pas fini et ca mettra encore un certain temps vu mes enormes competences et vu aussi je je suis pas colle derniere mon ecran si souvent
www.galerie-nomade.com
pegase31
Messages postés6138Date d'inscriptiondimanche 21 décembre 2003StatutModérateurDernière intervention 4 septembre 201312 14 mars 2008 à 23:57
ben pour la taille, il y a monClip._width et monClip._heignt (en AS1 & 2) ... c'est clair que c'est écraser une mouche à coup de bazooka sur le coup.
Peg'
otomat
Messages postés21Date d'inscriptionlundi 24 septembre 2007StatutMembreDernière intervention30 janvier 2010 14 mars 2008 à 23:50
merci pour le update after event. Je l'avais lu d'ailleurs dans la notice. Sinon j'ai utilise Matrix et Transform un peu pour le fun car je suis debutant et ca me permet d'apprendre.
J'avais aussi pense utiliser la propriete _rotation mais pour le changement d'echelle a par Matrix je vois pas.
Sinon mon code n'est pas optimise, il y a des redondances dans les boucles. J'y jetterais un oeil.
Beaucoup trop compliqué au niveau du code pour le résultat donné.
Je n'ai pas regarder en détails, je ne critique là que la longueur du code, et la méthode utilisée qui n'est à mon sens pas la meilleur (pourquoi se servir de Matrix et de Transform ?).
Je pense que tu peux faire ça beaucoup plus simplement, mais c'est à toi de voir, ça servirait à rien que je te dise comment faire ;)
Sinon, une petite info à savoir, le updateAfterEvent() n'est utile QUE dans un onMouseMove. Donc strictement inutile dans un onPress.
Voilà pour la critique rapide :)
otomat
Messages postés21Date d'inscriptionlundi 24 septembre 2007StatutMembreDernière intervention30 janvier 2010 14 mars 2008 à 21:45
j'ai essayer de rajouter un zip avec le swf et le fla mais ca me renvoie tjs un message d'erreur ?
pegase31
Messages postés6138Date d'inscriptiondimanche 21 décembre 2003StatutModérateurDernière intervention 4 septembre 201312 14 mars 2008 à 14:33
avec un swf d'exemple, ce serait mieux .. tout le monde n'a pas Flash sous la main pour tester ...
17 mars 2008 à 23:39
Ton code est simple, complet et efficace:adopté. La variable de stockage est vraiment une bonne idee dont je prends note. Ca devrait pouvoir me simplifier pas mal de choses.
Merci Slagt
17 mars 2008 à 22:25
Dans le code qui suit, il faut placer sur la scène un clip "monMc".
Ensuite, tu peux rajouter autant de clip que tu veux, ça marchera, du moment que tu leur attribue le même onPress et le même onRelease, le dernier clip sur lequel tu as cliqué étant stocké dans la variable CLIP.
==================
var CLIP:MovieClip;
monMc.onPress = function ()
{
CLIP = this;
startDrag (CLIP, false);
}
monMc.onRelease = function ()
{
stopDrag();
}
var EC:Object = new Object();
EC.onKeyDown = function ()
{
if (!CLIP)
return;
if (Key.isDown(Key.LEFT))
{
CLIP._rotation -= 5;
}
else if (Key.isDown(Key.RIGHT))
{
CLIP._rotation += 5;
}
if (Key.isDown(Key.UP))
{
CLIP._xscale += 10;
CLIP._yscale = CLIP._xscale;
}
else if (Key.isDown(Key.DOWN))
{
CLIP._xscale -= 10; CLIP._yscale CLIP._xscale Math.max(0, CLIP._xscale);
}
}
Key.addListener (EC);
==================
J'ai rajouté le code empêchant d'avoir un _xscale/_yscale négatif.
16 mars 2008 à 14:04
voici le code pour le gars ou la gazesse qui comme moi aurait mal lu la notice, on peut y rajouter une condition pour eviter la symetrie lorsque num devient negatif :
plasrou_mc.onPress = function() {
this.startDrag(false);
};
plasrou_mc.onRelease = function() {
this.stopDrag();
};
var num:Number = 100
var mouseListener:Object = new Object();
mouseListener.onMouseUp = function():Void {
if (plasrou_mc.hitTest(_xmouse, _ymouse)) {
var keyListener:Object = new Object();
keyListener.onKeyDown = function() {
if (Key.isDown(Key.LEFT)) {
plasrou_mc._rotation -= 5;
} else if (Key.isDown(Key.RIGHT)) {
plasrou_mc._rotation += 5;
} else if (Key.isDown(Key.UP)) {
num += 10
plasrou_mc._xscale = num;
plasrou_mc._yscale = num;
trace(plasrou_mc._width);
trace(plasrou_mc._height);
} else if (Key.isDown(Key.DOWN)) {
num -= 10
plasrou_mc._xscale = num;
plasrou_mc._yscale = num;
}
};
}
Key.addListener(keyListener);
};
Mouse.addListener(mouseListener);
16 mars 2008 à 13:41
Je vais essayer avec _xscale et _yscale et si ca marche, tant mieux. Apparament ca devrait le faire vu que ces instruction sont en pourcentage.
C'est d'ailleurs un peu pour cette raison que j'avais publie cette source, ca me semblait un peu trop b... et j'avais aucun retour sur le forum. En attendant, j'ai appris quelques trucs sur l'utilisation de matrix.
Bref mieux vaut bien relire la notice et trouver la bonne instruction avant de se lancer.
15 mars 2008 à 23:55
Pour toi, y a quelque chose de beaucoup mieux, c'est _xscale et _yscale. L'avantage, c'est que ce nombre peut être négatif, et inverse la forme dans ce cas. L'autre avantage, c'est que tu n'as pas besoin de calculer le rapport à chaque fois entre les largeur et hauteur. Si tu veux diviser par deux la taille, tu mets _xscale et _yscale à 50. Tout simplement (50%).
Si tu veux faire une symétrie horizontale, tu mets _xscale à -100.
Voilà le genre de truc qu'on peut faire :)
15 mars 2008 à 16:59
15 mars 2008 à 00:54
15 mars 2008 à 00:30
Bon ben comme vous etes deux super pros donnez moi de bons coneils sur un site que je fais en flash, enfin si vous voulez.
c'est pas fini et ca mettra encore un certain temps vu mes enormes competences et vu aussi je je suis pas colle derniere mon ecran si souvent
www.galerie-nomade.com
14 mars 2008 à 23:57
Peg'
14 mars 2008 à 23:50
J'avais aussi pense utiliser la propriete _rotation mais pour le changement d'echelle a par Matrix je vois pas.
Sinon mon code n'est pas optimise, il y a des redondances dans les boucles. J'y jetterais un oeil.
14 mars 2008 à 22:14
Je n'ai pas regarder en détails, je ne critique là que la longueur du code, et la méthode utilisée qui n'est à mon sens pas la meilleur (pourquoi se servir de Matrix et de Transform ?).
Je pense que tu peux faire ça beaucoup plus simplement, mais c'est à toi de voir, ça servirait à rien que je te dise comment faire ;)
Sinon, une petite info à savoir, le updateAfterEvent() n'est utile QUE dans un onMouseMove. Donc strictement inutile dans un onPress.
Voilà pour la critique rapide :)
14 mars 2008 à 21:45
14 mars 2008 à 14:33
Peg'