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 27/07/2007, 22h45   #1
Membre confirmé
 
Avatar de sourivore
 
Développeur Java
Inscription : juin 2005
Messages : 443
Détails du profil
Informations personnelles :
Localisation : France, Somme (Picardie)

Informations professionnelles :
Activité : Développeur Java

Informations forums :
Inscription : juin 2005
Messages : 443
Points : 278
Points : 278
Par défaut [Flash CS3][AS3]Charger clip avec une classe dynamique

Bonjour, je cherche à charger un clip dynamiquement en fonction d'une variable.

Typiquement, voici ma fonction :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function majPrinc(sens){
	//Creation du Movieclip du haut
	var princHaut:MovieClip = new MovieClip();
	this.addChild(princHaut);
	princHaut.x = 98;
	princHaut.y = 18;
	var princHautDsp:this["princHautAttend"+sens] = new this["princHautAttend"+sens]();
	princHaut.addChild(princHautDsp);
	//Creation du Movieclip du bas
	var princBas:MovieClip = new MovieClip();
	this.addChild(princBas);
	princBas.x = 155;
	princBas.y = 293;
	var princBasDsp:this["princBasMarche"+sens] = new this["princBasMarche"+sens]();
	princBas.addChild(princBasDsp);
}
et l'appel de la fonction :

Code :
this.majPrinc("Droite");
Avec la disparition de la fonction eval je trouvais cette solution logique. Or, cela ne marche toujours pas.

Quelle est la bonne technique?

Merci

PS : J'ai bien fait les linkages dans les bons symboles.
__________________
Toi aussi, crée ton armée de soldat de plomb :
http://souris-bleues.minitroopers.fr/
sourivore est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/07/2007, 08h57   #2
Inactif
 
Avatar de CR_Gio
 
Inscription : septembre 2005
Messages : 1 196
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 1 196
Points : 1 201
Points : 1 201
Bonjour sourivore, bonjour a tous,

Je ne me suis pas mis a l'AS3, mais cette ligne de code me parrai suspect
Code :
var princHautDsp:this["princHautAttend"+sens] = new this["princHautAttend"+sens]();
es tu sùr que la syntaxe est correcte ?

majPrinc() est une methode de ta class ou une fonction édité dans l'IDE flash CS3 ?

Pourrais tu expliquer ce que tu souhaite faire ? qu'as tu mis en place pour cela ?

---------------------------
Corrige moi :
J'ai crue comprendre que tu souhaite instancier dans ta scene un clip ( présent dans ta bibliotheque ).
CR_Gio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/07/2007, 09h36   #3
Membre confirmé
 
Avatar de sourivore
 
Développeur Java
Inscription : juin 2005
Messages : 443
Détails du profil
Informations personnelles :
Localisation : France, Somme (Picardie)

Informations professionnelles :
Activité : Développeur Java

Informations forums :
Inscription : juin 2005
Messages : 443
Points : 278
Points : 278
Bien sûr que cette ligne ne marche pas sinon je ne poserai pas la question

En fait typiquement ce que je veux faire est simple :

- 2 boutons btGauche et btDroite dans mon fichier
- 4 Clips "HautGauche", "HautDroite", "BasGauche", "BasDroite"

Je voudrais que lorsque l'on appuie sur le bouton Gauche les clips HautGauche et BasGauche se chargent et lorsque j'appuie sur le bouton Droite ce soient les clips HautDroite et BasDroite qui remplacent respectivement les deux autres.

Apparemment j'ai réussi à contourner mon problème mais je n'arrive pas à remplacer les instances (il m'ajoute toujours un nouveau clip)

Voici mon code :

Ma fonction directement dans le code AS d'une frame :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function majPrinc(sens) {
	//Mettre à jour l'animation du personnage
	//Creation du Movieclip du haut (ne doit le creer que s'il n'existe pas!!!)
	var princHaut:MovieClip = new MovieClip();
	this.addChild(princHaut);
	princHaut.x = 98;
	princHaut.y = 18;
	//Attacher le bon clip du haut
	var classHaut:Class = getDefinitionByName("princHautAttend"+sens) as Class;
	var princHautDsp:* = new classHaut();
	princHaut.addChildAt(princHautDsp,0);
	//Creation du Movieclip du bas
	var princBas:MovieClip = new MovieClip();
	addChild(princBas);
	princBas.x = 155;
	princBas.y = 293;
	//Attacher le bon clip du bas
	var classBas:Class = getDefinitionByName("princBasMarche"+sens) as Class;
	var princBasDsp:* = new classBas();
	princBas.addChildAt(princBasDsp,0);
}
Sur un autre calque de la même frame, je fais :
Code :
1
2
3
4
5
//On crée les clips avec leurs instances (personnage marche à droite par défaut)
this.majPrinc("Droite");
//Listener sur les boutons
btGauche.addEventListener(MouseEvent.CLICK,function(event:Event){majPrinc("Gauche")});
btDroite.addEventListener(MouseEvent.CLICK,function(event:Event){majPrinc("Droite")});
- Suis-je bien parti?
- Comment faire pour éviter qu'a chaque clic un nouveau clip soit créé et ainsi avoir ce que je veux?
- Cela m'aiderait aussi de savoir comment un utilisateur régulier d'AS3 le coderait (pour voir les bonnes pratiques d'utilisation de l'AS3)

Merci beaucoup
__________________
Toi aussi, crée ton armée de soldat de plomb :
http://souris-bleues.minitroopers.fr/
sourivore est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/07/2007, 11h32   #4
Membre chevronné
 
Inscription : mai 2005
Messages : 657
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 657
Points : 722
Points : 722
Salut,

Je suis loin d'être expert en AS3, mais voilà ce que je ferais :

Une classe qui va bien avec :
- 4 variables d'instance pour chacun de tes clips
- Une methode majPrinc(clipHaut, clipBas)
- Deux méthodes majPrincHaut() et majPrincBas() qui appellent la premiere avec les bons clips

De plus est-ce qu'il y a réellement un interet a créer les clips à l'appel de ta fonction, plutôt que de les avoir déjà crée a l'initialisation de ta classe et ensuite de simplement : soit les ajouter/supprimer avec addChild, removeChild, soit les rendre visible/invisible ?


Mais par pitié, arrête de coder dans la timeline (surtout pour définir des fonctions )
Taum est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/07/2007, 11h49   #5
Membre confirmé
 
Avatar de sourivore
 
Développeur Java
Inscription : juin 2005
Messages : 443
Détails du profil
Informations personnelles :
Localisation : France, Somme (Picardie)

Informations professionnelles :
Activité : Développeur Java

Informations forums :
Inscription : juin 2005
Messages : 443
Points : 278
Points : 278
Tout d'abord pour ma défense je tiens à souligner que je viens de l'univers AS1 et donc pour moi la POO AS3 c'est assez nouveau.

Citation:
Envoyé par Taum
Salut,

Je suis loin d'être expert en AS3, mais voilà ce que je ferais :

Une classe qui va bien avec :
- 4 variables d'instance pour chacun de tes clips
- Une methode majPrinc(clipHaut, clipBas)
- Deux méthodes majPrincHaut() et majPrincBas() qui appellent la premiere avec les bons clips
Je vais essayer même si ça ne me parle pas trop et que je ne vois pas l'utilisation des variables d'instance


Citation:
Envoyé par Taum
De plus est-ce qu'il y a réellement un interet a créer les clips à l'appel de ta fonction, plutôt que de les avoir déjà crée a l'initialisation de ta classe et ensuite de simplement : soit les ajouter/supprimer avec addChild, removeChild, soit les rendre visible/invisible ?
Je veux bien mais à l'initialisation de quelle classe? Sinon on ne peut faire quelquechose du genre replaceChild?


Citation:
Envoyé par Taum
Mais par pitié, arrête de coder dans la timeline (surtout pour définir des fonctions )
OK mais pour les fonctions générales, je ne vois pas l'intérêt de les mettre dans une classe. Par exemple la fonction majPrinc ne s'applique pas à un objet en particulier tout comme par exemple les fonctions de conversion de date.
__________________
Toi aussi, crée ton armée de soldat de plomb :
http://souris-bleues.minitroopers.fr/
sourivore est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/07/2007, 15h44   #6
Membre chevronné
 
Inscription : mai 2005
Messages : 657
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 657
Points : 722
Points : 722
Citation:
Envoyé par sourivore
Tout d'abord pour ma défense je tiens à souligner que je viens de l'univers AS1 et donc pour moi la POO AS3 c'est assez nouveau.
Désolé si je t'ai offensé, ce n'était pas du tout là mon intention. Je voulais juste te faire réagir sur le fait que si tu passes a AS3, je penses que tu devrais également laisser tomber certaines pratiques d'AS1/2

Citation:
Envoyé par sourivore
Sinon on ne peut faire quelquechose du genre replaceChild?
Je ne crois pas qu'il y ait de fonction replaceChild, il faut faire addChild puis removeChild


Citation:
Envoyé par sourivore
OK mais pour les fonctions générales, je ne vois pas l'intérêt de les mettre dans une classe. Par exemple la fonction majPrinc ne s'applique pas à un objet en particulier tout comme par exemple les fonctions de conversion de date.
C'est là que je ne suis pas d'accord avec toi : il n'y a pas de fonctions générales.
Les fonctions de manipulations de date font partie de la classe Date. Et si tu veux en rajouter, tu peux faire une classe DateUtils par exemple. En AS3, presque toutes les fonctions sont en fait des méthodes (certaines étant des méthodes de classe (mot clé static), les autres des méthodes d'instances).
La preuve que ta fonction n'est pas "générale" : elle fait référence a this dans this.addChild. Tu es en réalité en train de manipuler un DisplayObjectContainer.
La scène est finalement un MovieClip comme les autres. Tu peux lui donner un nom de classe dans la case "Document Class" de la fenêtre "Properties" dans Flash CS3 et créer cette classe pour l'étendre avec tes méthodes et propriétés. Le constructeur de cette classe est appellé quand l'animation se lance

Un (court) tuto ici : http://iteratif.developpez.com/artic...asse/document/
Essaie de te renseigner un peu sur la nouvelle architecture d'AS3 en ce qui concerne les MovieClip (DisplayObject, DisplayObjectContainer, Sprite vs. MovieClip etc. )
Taum est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h32.


 
 
 
 
Partenaires

Hébergement Web