begin process at 2010 03 20 01:59:12
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

ActionScripts

 > REDIMENSIONNER ET TOURNER UN CLIP A L'AIDE DES FLECHES

REDIMENSIONNER ET TOURNER UN CLIP A L'AIDE DES FLECHES


 Information sur la source

Note :
Aucune note
Catégorie :ActionScripts Classé sous :echelle, rotation, redimensionnement, matrix, tourne Niveau :Débutant Date de création :14/03/2008 Date de mise à jour :14/03/2008 23:42:21 Vu :4 486

Auteur : otomat

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

 Description

soit un clip sur la scene que l'on peut deplacer avec la souris. On peut egalement avec les fleches du clavier le faire tourner et le redimensionner.

Source

  • import flash.geom.Transform;
  • import flash.geom.Matrix;
  • plasrou_mc.onPress = function() {
  • this.startDrag(false);
  • };
  • plasrou_mc.onRelease = function() {
  • this.stopDrag();
  • };
  • var num:Number = new Number();
  • var numleft = -5;
  • var numright = 5;
  • var nume = 1;
  • var compta:Number = 0;
  • var comptb:Number = 0;
  • var comptc:Number = 0;
  • var comptd:Number = 0;
  • var mouseListener:Object = new Object();
  • mouseListener.onMouseUp = function():Void {
  • if (plasrou_mc.hitTest(_xmouse, _ymouse)) {
  • var posxrect = plasrou_mc._x;
  • var posyrect = plasrou_mc._y;
  • var keyListener:Object = new Object();
  • keyListener.onKeyDown = function() {
  • var tourneMatrix:Matrix = new Matrix();
  • var translateMatrix:Matrix = new Matrix();
  • var neo:Transform = new Transform(plasrou_mc);
  • var echelleMatrix:Matrix = new Matrix();
  • if (Key.isDown(Key.LEFT)) {
  • compta = 1;
  • if ((compta != comptc) && (compta != comptd)) {
  • numleft = numleft-5;
  • num = numleft+numright;
  • tourneMatrix.rotate(num*Math.PI/180);
  • translateMatrix.translate(posxrect,posyrect);
  • tourneMatrix.concat(translateMatrix);
  • dadaMatrix = tourneMatrix.clone();
  • } else {
  • numleft = numleft-5;
  • num = numleft+numright;
  • tourneMatrix.rotate(num*Math.PI/180);
  • translateMatrix.translate(posxrect,posyrect);
  • tourneMatrix.concat(translateMatrix);
  • dadaMatrix = tourneMatrix.clone();
  • tourneMatrix.concat(dodoMatrix);
  • tourneMatrix.tx = posxrect;
  • tourneMatrix.ty = posyrect;
  • }
  • neo.matrix = tourneMatrix;
  • } else if (Key.isDown(Key.RIGHT)) {
  • comptb = 1;
  • if ((comptb != comptc) && (comptb != comptd)) {
  • numright = numright+5;
  • num = numright+numleft;
  • tourneMatrix.rotate(num*Math.PI/180);
  • translateMatrix.translate(posxrect,posyrect);
  • tourneMatrix.concat(translateMatrix);
  • dadaMatrix = tourneMatrix.clone();
  • } else {
  • numright = numright+5;
  • num = numright+numleft;
  • tourneMatrix.rotate(num*Math.PI/180);
  • translateMatrix.translate(posxrect,posyrect);
  • tourneMatrix.concat(translateMatrix);
  • dadaMatrix = tourneMatrix.clone();
  • tourneMatrix.concat(dodoMatrix);
  • tourneMatrix.tx = posxrect;
  • tourneMatrix.ty = posyrect;
  • }
  • neo.matrix = tourneMatrix;
  • } else if (Key.isDown(Key.UP)) {
  • comptc = 1;
  • if ((comptc != compta) && (comptc != comptb)) {
  • nume = nume+0.1;
  • echelleMatrix.scale(nume,nume);
  • translateMatrix.translate(posxrect,posyrect);
  • echelleMatrix.concat(translateMatrix);
  • dodoMatrix = echelleMatrix.clone();
  • } else {
  • nume = nume+0.1;
  • echelleMatrix.scale(nume,nume);
  • translateMatrix.translate(posxrect,posyrect);
  • echelleMatrix.concat(translateMatrix);
  • dodoMatrix = echelleMatrix.clone();
  • echelleMatrix.concat(dadaMatrix);
  • echelleMatrix.tx = posxrect;
  • echelleMatrix.ty = posyrect;
  • }
  • neo.matrix = echelleMatrix;
  • } else if (Key.isDown(Key.DOWN)) {
  • comptd = 1;
  • if ((comptd != compta) && (comptd != comptb)) {
  • nume = nume-0.1;
  • echelleMatrix.scale(nume,nume);
  • translateMatrix.translate(posxrect,posyrect);
  • echelleMatrix.concat(translateMatrix);
  • dodoMatrix = echelleMatrix.clone();
  • } else {
  • nume = nume-0.1;
  • echelleMatrix.scale(nume,nume);
  • translateMatrix.translate(posxrect,posyrect);
  • echelleMatrix.concat(translateMatrix);
  • dodoMatrix = echelleMatrix.clone();
  • echelleMatrix.concat(dadaMatrix);
  • echelleMatrix.tx = posxrect;
  • echelleMatrix.ty = posyrect;
  • }
  • neo.matrix = echelleMatrix;
  • }
  • };
  • Key.addListener(keyListener);
  • }
  • }
  • Mouse.addListener(mouseListener);
import flash.geom.Transform;
import flash.geom.Matrix;


plasrou_mc.onPress = function() {
	this.startDrag(false);
};
plasrou_mc.onRelease = function() {
	this.stopDrag();
};
var num:Number = new Number();
var numleft = -5;
var numright = 5;
var nume = 1;
var compta:Number = 0;
var comptb:Number = 0;
var comptc:Number = 0;
var comptd:Number = 0;

var mouseListener:Object = new Object();
mouseListener.onMouseUp = function():Void  {
	if (plasrou_mc.hitTest(_xmouse, _ymouse)) {
		
		var posxrect = plasrou_mc._x;
		var posyrect = plasrou_mc._y;
		
		var keyListener:Object = new Object();
		keyListener.onKeyDown = function() {
			var tourneMatrix:Matrix = new Matrix();
			var translateMatrix:Matrix = new Matrix();
			var neo:Transform = new Transform(plasrou_mc);
			var echelleMatrix:Matrix = new Matrix();
			
			if (Key.isDown(Key.LEFT)) {
				compta = 1;
				if ((compta != comptc) && (compta != comptd)) {
					numleft = numleft-5;
					num = numleft+numright;
					tourneMatrix.rotate(num*Math.PI/180);
					translateMatrix.translate(posxrect,posyrect);
					tourneMatrix.concat(translateMatrix);
					dadaMatrix = tourneMatrix.clone();
				} else {
					numleft = numleft-5;
					num = numleft+numright;
					tourneMatrix.rotate(num*Math.PI/180);
					translateMatrix.translate(posxrect,posyrect);
					tourneMatrix.concat(translateMatrix);
					dadaMatrix = tourneMatrix.clone();
					tourneMatrix.concat(dodoMatrix);
					tourneMatrix.tx = posxrect;
					tourneMatrix.ty = posyrect;
				}
				neo.matrix = tourneMatrix;
				
			} else if (Key.isDown(Key.RIGHT)) {
				comptb = 1;
				if ((comptb != comptc) && (comptb != comptd)) {
					numright = numright+5;
					num = numright+numleft;
					tourneMatrix.rotate(num*Math.PI/180);
					translateMatrix.translate(posxrect,posyrect);
					tourneMatrix.concat(translateMatrix);
					dadaMatrix = tourneMatrix.clone();
				} else {
					numright = numright+5;
					num = numright+numleft;
					tourneMatrix.rotate(num*Math.PI/180);
					translateMatrix.translate(posxrect,posyrect);
					tourneMatrix.concat(translateMatrix);
					dadaMatrix = tourneMatrix.clone();
					tourneMatrix.concat(dodoMatrix);
					tourneMatrix.tx = posxrect;
					tourneMatrix.ty = posyrect;
				}
				neo.matrix = tourneMatrix;

			} else if (Key.isDown(Key.UP)) {
				comptc = 1;
				if ((comptc != compta) && (comptc != comptb)) {
					nume = nume+0.1;
					echelleMatrix.scale(nume,nume);
					translateMatrix.translate(posxrect,posyrect);
					echelleMatrix.concat(translateMatrix);
					dodoMatrix = echelleMatrix.clone();
				} else {
					nume = nume+0.1;
					echelleMatrix.scale(nume,nume);
					translateMatrix.translate(posxrect,posyrect);
					echelleMatrix.concat(translateMatrix);
					dodoMatrix = echelleMatrix.clone();
					echelleMatrix.concat(dadaMatrix);
					echelleMatrix.tx = posxrect;
					echelleMatrix.ty = posyrect;
				}
				neo.matrix = echelleMatrix;
				
			} else if (Key.isDown(Key.DOWN)) {
				comptd = 1;
				if ((comptd != compta) && (comptd != comptb)) {
					nume = nume-0.1;
					echelleMatrix.scale(nume,nume);
					translateMatrix.translate(posxrect,posyrect);
					echelleMatrix.concat(translateMatrix);
					dodoMatrix = echelleMatrix.clone();
				} else {
					nume = nume-0.1;
					echelleMatrix.scale(nume,nume);
					translateMatrix.translate(posxrect,posyrect);
					echelleMatrix.concat(translateMatrix);
					dodoMatrix = echelleMatrix.clone();
					echelleMatrix.concat(dadaMatrix);
					echelleMatrix.tx = posxrect;
					echelleMatrix.ty = posyrect;
				}
				neo.matrix = echelleMatrix;
			}
		};
		Key.addListener(keyListener);
	}
}
Mouse.addListener(mouseListener);

 Conclusion

Si quelqu'un a un code plus compact je suis preneur.


 Historique

14 mars 2008 11:10:15 :
faute d'orthographe
14 mars 2008 20:49:07 :
oubie de la dernire ligne du code
14 mars 2008 23:42:21 :
correction code

 Sources de la même categorie

Source avec Zip Source avec une capture LANCER UNE GALERIE LIGHTBOX À PARTIR D'UN FLASH par beladom
Source avec Zip SUPER TWEEN PACKAGE par Acidchlorhydrik
Source avec Zip NAVIGATION DANS UN FICHIER XML par inaden
Source avec Zip Source avec une capture TWSCROLLBAR, UNE CLASSE DE SCROLLBAR SIMPLE ET PRATIQUE À UT... par Twinspirit
Source avec Zip Source avec une capture REBOND DE BALLON AVEC TWEEN par habibcode

 Sources en rapport avec celle ci

Source avec Zip REDIMENSIONNEMENT PROPORTIONNEL D'UNE IMAGE par Orange73
Source avec Zip Source avec une capture MATRIX 99% CODE, 100% ALÉATOIRE AVEC TEXT OVERLAY par qwertzguy
FAIRE TOURNER UN TABLEAU (ARRAY) par Girou
Source avec Zip MENU EN 3D par jiminy2
Source avec Zip CUBE 3D AVEC ROTATION par gremlins7

Commentaires et avis

Commentaire de pegase31 le 14/03/2008 14:33:27 administrateur CS

avec un swf d'exemple, ce serait mieux .. tout le monde n'a pas Flash sous la main pour tester ...

Peg'

Commentaire de otomat le 14/03/2008 21:45:59

j'ai essayer de rajouter un zip avec le swf et le fla mais ca me renvoie tjs un message d'erreur ?

Commentaire de Slagt le 14/03/2008 22:14:59

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 :)

Commentaire de otomat le 14/03/2008 23:50:15

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.

Commentaire de pegase31 le 14/03/2008 23:57:02 administrateur CS

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'

Commentaire de otomat le 15/03/2008 00:30:15

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

Commentaire de otomat le 15/03/2008 00:54:07

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

Commentaire de otomat le 15/03/2008 16:59:04

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...

Commentaire de Slagt le 15/03/2008 23:55:05

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 :)

Commentaire de otomat le 16/03/2008 13:41:59

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.

Commentaire de otomat le 16/03/2008 14:04:27

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);

Commentaire de Slagt le 17/03/2008 22:25:12

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;
     }

     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.

Commentaire de otomat le 17/03/2008 23:39:37

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

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

rotation d'un symbole par évènement utilisateur [ par fredd75 ] Bonjour à tous Je cherche à faire tourner un symbole par on (press)Malheureusement, le symbole ( bien que son point d'ancrage soit centr&#23 rotation (inteligente???) [ par arthur07b ] bon voila jaimerai fais un cercle avec plusieur icone dessus puis faire que en appuyant sur des bouton corespondant a c icone le cercle tourne jusque& Matrix 3d et Rotation 3d [ par Orange73 ] Hello, Je voulais connaitre la difference entre modifier un clip avec matrix3d ou modifier ce clip via les propriete x/y/z et rotationX/Y/Z : 1/ Mat animation de bouton (balancement) [ par Soa3 ] Bonjour, je réalise une application en Action Script 2 et je débute; J'ai des boutons que je souhaite faire se balancer mais j'ai deux problèmes : je Code pour rotation et deplacement avec la souris d'un clip [ par benjone ] Bonjour, je sais faire ces deux fonctions en AS3(voir sujet), mais comment faire pour les combiner à un clip et que cela fonctionne bien? je veux dire Page qui se tourne [ par cagoulechonchon ] Bonjour a vous, je cherche a créer une intro en flash sur mon site. J'aimerais 2 volets qui s'ouvrent. Non pas comme les portes rigides d'un saloon m Texte en rotation 360° Y [ par muana ] [^^happy13]Bonjour à tous! Je viens de commencer avec flash, j'utilise la version CS3 (Adobe Design Premium). Lors de mes récentes recherches, suis to Problème redimensionnement image apres chargement externe [ par matthmuc72 ] Bonsoir!! Voici mon soucis: j'aimerais pouvoir redimensionner mon image après l'avoir chargé mais il ne se passe rien lorsque je fais ceci: [code=a matrix : comment changer la police d'un effet matrix ? [ par MATEO1200 ] je voudrais savoir comment est-il possible de modifier la police d'un effet matrix disponible sur le site, en demandant bien évidemment le droit createTextField et rotation [ par djagger ] Salut ! Je crées un texte avec createTextField, pas de pb.Par contre quand je fais une rotation sur mon texte, il disparait !? _root.createTextFi


Nos sponsors


Sondage...

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
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 : 0,562 sec (3)

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