Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Flash/Flex > Flash > AS3
AS3 Questions relatives à la programmation ActionScript 3 (Cours AS3)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/08/2007, 11h30   #1
Candidat au titre de Membre du Club
 
Inscription : février 2007
Messages : 51
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 51
Points : 12
Points : 12
Par défaut [AS3] Organisation du code sous FlashCS3

Bonjour,

Comment organiser son code sous FlashCS3? J'ai déja crée une classe qui est 'liée' à mon .fla en tant que Classe du document. Or j'aimerais créer un fichier .as ou une autre classe si nécessaire, qui s'occuperai de la gestion de mes boutons et de la navigation par exemple.

C'est possible sans rajouter du code dans les images? J'aimerais si possible que tous mon code soit dans des fichiers .as en fait. Je suis peut êtres pas obliger de créer des classes à chaque fois d'ailleurs ?
devtroll est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2007, 12h24   #2
Membre chevronné
 
Inscription : mai 2005
Messages : 657
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 657
Points : 722
Points : 722
Salut

Tu peux lié n'importe quel ressource de ta bibliothèque (Clip, Bouton, etc.) à une classe AS3 en fesant dans la fenetre bibliothèque : clic droit > Liaison. Il faut cocher "Exporter pour ActionScript", puis dans Classe tu met le nom de ta classe, et dans Classe de base la classe dont il dérive (généralement flash.display.MovieClip pour les MovieClip, SimpleButton pour les Boutons, etc.)

Comme ça tu peux rajouter des méthodes/propriétés aux objets de ta bibliothèque
La règle ici c'est que chaque objet de ta bibliothèque est une classe. Par contre tu n'as besoin de créer un fichier .as et de coder dedans que si tu as effectivement des méthodes à rajouter.
Si tu veux simplement faire new MonClip(); dans ton code, il suffit de donner un nom de classe dans la fenêtre "Liaison" (tu n'as pas besoin de créer le .as correspondant).
Taum est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2007, 13h09   #3
Candidat au titre de Membre du Club
 
Inscription : février 2007
Messages : 51
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 51
Points : 12
Points : 12
hum...je viens de créer un bouton nommé btnPlay dans la bibliothèque. Dans Liaison je l'ai exporté pour ActionScript. Dans le champs Classe j'ai mis : BtnPlay.as et dans la classe de base flash.display.SimpleButton.

J'ai ensuite créé mon fichier BtnPlay.as dont voici le code :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package {
 
	import flash.display.SimpleButton;
	import flash.display.Sprite;
	import flash.display.Loader;
	import flash.display.LoaderInfo;
	import flash.events.*;
	import flash.net.*;
	import flash.text.TextField;
 
	public class BtnPlay extends flash.display.SimpleButton {
		public function BtnPlay() {
			btnPlay.addEventListener(MouseEvent.CLICK, bouton);
		}
		private function bouton(pEvt:Event):void {
			monDebug.text = "ON CLICK OK";
		}
	}
 
}
monDebug.text etant un texte dynamique se trouvant sur la même image que l'occurence de mon bouton.

Le problème c'est que ça ne fait rien. Je dois pas construire ma classe corectement je pense...
devtroll est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2007, 14h52   #4
Membre chevronné
 
Inscription : mai 2005
Messages : 657
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 657
Points : 722
Points : 722
Ta classe est construite correctement, en revanche je pense que tu n'as pas bien compris un détail : quand tu fais une classe pour le bouton, le code que tu y met est "relatif" à ce bouton (cad this = le bouton). Donc il faut faire :
Code :
1
2
3
4
5
6
		public function BtnPlay() {
			addEventListener(MouseEvent.CLICK, bouton);
		}
		private function bouton(pEvt:Event):void {
			parent.monDebug.text = "ON CLICK OK";
		}
parent désigne comme son nom l'indique le clip qui contient ton bouton ... si il y en a un.
Les problèmes que tu risques d'avoir avec l'utilisation de parent, c'est qu'a priori on sait seulement que c'est un DisplayObjectContainer : il faut le caster si tu veux pouvoir utiliser des méthodes/propriétés que tu aurais rajouté
Taum est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2007, 16h01   #5
Candidat au titre de Membre du Club
 
Inscription : février 2007
Messages : 51
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 51
Points : 12
Points : 12
Euh...ça ne marche toujours pas....mais mon bouton et mon champs de texte ne sont pas dans le même clip. Donc je pense que 'parent' ne marcheras pas c'est ça?

Pour que cela marche il faudrait que je regroupe mon bouton et le champs de texte en un clip (avec F8) ? Mais c'est pas très pratique...

La mon bouton et mon champ texte dynamique sont sur différents calque, mais s'affichent au même moment (en 1 je sais pas trop comment on dit). y a pas moyen qu'ils comuniquent entre eux?

edit : Je viens de tester de mettre un champ texte et un bouton dans un même clip, pour tester le parent. Mais cela ne marche pas.

edit2 : Malgré les liaisons je pense pas que mon .fla s'occupe de mes .as en effet même en laissant des erreurs de syntax dans mon .as je peux toujours publier tranquilement ...

edit3 : Euh un truc que je comprend pas trop non plus. Dans ma classe principal (enfin celle qui enregistrer en tant que classe du document) j'ai rajouter un import BtnPlay. Or meme comme ça, si il y a une erreur dans mon script BtnPlay je peux publier.
devtroll est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2007, 18h05   #6
Membre chevronné
 
Inscription : mai 2005
Messages : 657
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 657
Points : 722
Points : 722
Citation:
edit2 : Malgré les liaisons je pense pas que mon .fla s'occupe de mes .as en effet même en laissant des erreurs de syntax dans mon .as je peux toujours publier tranquilement ...
Tu peux tester que la liaison est bien effectuée en cliquant sur le petit tick vert à droite du champ texte où tu rentres le nom de la classe :
Là il te dis :
- Soit : La définition de cette classe a été détectée sur C:\...\BtnPlay.as
=> c'est bon est il te dis quel fichier correspond

- Soit : Le chemin de classe ne contient pas de définition pour cette classe. Une définition sera générée automatiquement dans le fichier SWF lors de l'exportation.
=> tu as un problème de liaison. Dans ce cas il faut bien vérifier que tu n'as pas fait de faute de frappe par exemple, et que le fichier se situe au bon endroit (dans le même dossier que ton .fla).

Ca donne quoi chez toi ?
Taum est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2007, 18h17   #7
Candidat au titre de Membre du Club
 
Inscription : février 2007
Messages : 51
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 51
Points : 12
Points : 12
Ha oki mes liaisons était mauvaises. (J'avais renté les .as). Oki bon bah maintenant il prend en compte mes script ! Pour me generer une erreur mais au moin ils sont pris en comptes.

ça me met un :

Citation:
1119:Accès à la propriété monDebug peut-êtres non définie, via la référence de type static flash.display.DisplayObjectContainer
parent.monDebug.text = "ON CLIK OK";
edit1: J'ai tésté un cast comme cela ...d'après un exemple vue ailleur.

Code :
(parent.monDebug as TextField).text = "ON CLIK OK";
L'erreur reste la même...

edit2 : J'arrive vraiment pas à atteindre mon Texte Dynamique

J'ai testé pas mal de méthode :

Code :
1
2
3
4
5
6
7
8
9
10
11
//solution 1
TextField(this.parent).monDebug.text = "ON CLIK OK";
//solution 2
(this.parent as TextField).monDebug.text = "Hello";
//solution 3
this.parent['monDebug'].text = "Helllo";
//solution 4
TextField(this.parent).monDebug.text = "Hello";
//solution 5
var myClip:MovieCliper = MovieClip(this.parent);
myClip.monDebug.text = "Hello";
Dans le meilleur des cas ça publie mais ça ne fait rien sinon y a la même erreur que la haut...

edit 3:

Code :
this.parent['monDebug'].text = "Hello";
ça marche niquel en fait!
devtroll est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h24.


 
 
 
 
Partenaires

Hébergement Web