OVH Cloud OVH Cloud

[FLA/AS2] attachMovie (corrigé) ???

4 réponses
Avatar
Okimi
Le précedent POST a été envoyé trop vite et n'est pas très parlant.

Je recherche une doc très complète sur la fonction attachMovie car je
rencontre des problèmes avec celle-ci.

Je m'explique:
J'ai dans ma librairie 2 movies l'un est nommé 'Block' l'autre 'Plugin'.
Les deux movies sont 'Exportés pour Actionscript' et associé à une class.

Code AS du movie 'Block':
class Block {
// doit créer une instance du movie 'Plugin' dans l'instance 'Block'
this.attachMovie("Plugin", "obj", 1);
}

Code sur ma scene
this.attachMovie("Block","Block1",1);

Normalement, cette suite de code devrait créer une liste d'objets
organisés comme suit:

_level0
|
-- Block1
|
-- obj

Mais non ! Ca ne marche pas comme ca, le résultat est plus étrange, je
n'ai que :

_level0
|
-- Block1

Note: j'ai vérifié que le constructeur Block a bien été appelé et c'est
le cas...

A moins que l'on ne puisse créer dynamiquement une instance dans une
instance ???

4 réponses

Avatar
\(-: tatactic :-\)
class Block extends MovieClip {
function Block(){
this.attachMovie("Plugin", "obj", 1);
}
}

this.attachMovie("Block","Block1",1);

Ah ben quand on en sait un peu plus...


"Okimi" wrote in message
news:dr7ivo$11u$

Le précedent POST a été envoyé trop vite et n'est pas très parlant.

Je recherche une doc très complète sur la fonction attachMovie car je
rencontre des problèmes avec celle-ci.

Je m'explique:
J'ai dans ma librairie 2 movies l'un est nommé 'Block' l'autre 'Plugin'.
Les deux movies sont 'Exportés pour Actionscript' et associé à une class.

Code AS du movie 'Block':
class Block {
// doit créer une instance du movie 'Plugin' dans l'instance 'Block'
this.attachMovie("Plugin", "obj", 1);
}

Code sur ma scene
this.attachMovie("Block","Block1",1);

Normalement, cette suite de code devrait créer une liste d'objets
organisés comme suit:

_level0
|
-- Block1
|
-- obj

Mais non ! Ca ne marche pas comme ca, le résultat est plus étrange, je
n'ai que :

_level0
|
-- Block1

Note: j'ai vérifié que le constructeur Block a bien été appelé et c'est le
cas...

A moins que l'on ne puisse créer dynamiquement une instance dans une
instance ???



Avatar
ekameleon
Hello :)

PS : tu pouvais répondre à ton précédent post et pas faire un nouveau
message non ? :)


Le précedent POST a été envoyé trop vite et n'est pas très parlant.

Je recherche une doc très complète sur la fonction attachMovie car je
rencontre des problèmes avec celle-ci.



Pas certain qu'il te faille une doc que pour le attachMovie alors ;)

Je m'explique:
J'ai dans ma librairie 2 movies l'un est nommé 'Block' l'autre 'Plugin'.
Les deux movies sont 'Exportés pour Actionscript' et associé à une class.



Tu as bien donné le bon nom d'identifiant à tes clips dans les
paramètres de liaison ? Pour un symbole dans Flash il existe 4 sortes de
noms :
1 - nom de symbole (nom dans la bibliothèque... sert à rien pour
l'actionscript)

2 - nom d'occurence (nom que l'on donne à un symbole dans le panneau de
propriété = nom d'instance en quelque sorte)

3 - nom d'instance (nom d'un objet). On dit que l'on a une instance
d'une classe... MovieClip par exemple est une classe et tous tes clips
sur la scène ou que tu crées dynamiquement avec attachMovie ou
createEmptyMovieClip sont des instances !

4 - nom de liaison = nom dans le panneau de liaison (bouton droit sur le
symbole dans la biblio)



Code AS du movie 'Block':
class Block {
// doit créer une instance du movie 'Plugin' dans l'instance 'Block'
this.attachMovie("Plugin", "obj", 1);
}




Si tu attaches une classe sur un MovieClip, il est préférable que tu
hérites cette classe de MovieClip :

class Block extends MovieClip {
// ici contenu de ta classe
}


Ensuite ... tu devrais lire la doc pour créer des classes AS2 plutot !

Il faut un constructeur dans toutes tes classes qui est la fonction qui
initialise ton instance à chaque création de celle ci !

class Block extends MovieClip {

// --- constructor
function Block () {
// ici le code qui doit être lancé à l'initialisation de
l'instance !
}

}

Aussi si tu oublies cela et bien tu risque d'avoir des probèmes !

Pour la suite... il faut pas oublier que tes classes AS2 ne sont pas
"dynamique" par défaut !!!

Cela signifie qu'en AS2 faut déclarer toutes tes propriétés (variables)
contenues dans ton objet (instance)

Si tu veux créer un sous objet (obj) dans ton clip tu dois définir celui
ci en propriété publique ou privée :

class Block extends MovieClip {

// --- constructor
function Block () {
// ici le code qui doit être lancé à l'initialisation de
l'instance !
attachMovie("Plugin", "obj", 1) ; // là je peux créer mon clip
par exemple !
}

// ---- Public Property

public var obj:MovieClip ; // je défini mon objet

}

Code sur ma scene
this.attachMovie("Block","Block1",1);

Normalement, cette suite de code devrait créer une liste d'objets
organisés comme suit:

_level0
|
-- Block1
|
-- obj

Mais non ! Ca ne marche pas comme ca, le résultat est plus étrange, je
n'ai que :

_level0
|
-- Block1

Note: j'ai vérifié que le constructeur Block a bien été appelé et c'est
le cas...




Tu as vérifié ? et comment ? Dans ton code au dessus j'en vois pas de
constructeur ? Ne me dis pas que tu as oublié de le mettre hein ! ;) Si
c'est le cas la prochaine fois soit + attentif et pose correctement ta
question ;)

A moins que l'on ne puisse créer dynamiquement une instance dans une
instance ???



On peut créer dynamiquement créer une instance dans une autre en mettant
la classe en dynamique !


dynamic class Block extends MovieClip {

// --- constructor
function Block () {
// ici le code qui doit être lancé à l'initialisation de
l'instance !
attachMovie("Plugin", "obj", 1) ; // là je peux créer mon clip
par exemple !
}

// ---- Public Property

// public var obj:MovieClip ; // je défini mon objet

}

Voilà en gros ce qu'il faut faire ... Tout cela est expliqué dans la doc
en la lisant doucement et en faisant plusieurs petits tests ;)

Je te conseille de compléter tout cela avec les tutoriaux que tu peux
trouver ici : http://wiki.media-box.net/tutoriaux/flash#heritage_et_classes

EKA+ :)
Avatar
Okimi
Merci ekamelon pour ta longue réponse.


ekameleon a écrit :
Hello :)

PS : tu pouvais répondre à ton précédent post et pas faire un nouveau
message non ? :)



Ca valais le coup puisque tu m'as apporter la réponse...



Le précedent POST a été envoyé trop vite et n'est pas très parlant.

Je recherche une doc très complète sur la fonction attachMovie car je
rencontre des problèmes avec celle-ci.




Pas certain qu'il te faille une doc que pour le attachMovie alors ;)

Je m'explique:
J'ai dans ma librairie 2 movies l'un est nommé 'Block' l'autre 'Plugin'.
Les deux movies sont 'Exportés pour Actionscript' et associé à une class.



Tu as bien donné le bon nom d'identifiant à tes clips dans les
paramètres de liaison ? Pour un symbole dans Flash il existe 4 sortes de
noms :
1 - nom de symbole (nom dans la bibliothèque... sert à rien pour
l'actionscript)

2 - nom d'occurence (nom que l'on donne à un symbole dans le panneau de
propriété = nom d'instance en quelque sorte)

3 - nom d'instance (nom d'un objet). On dit que l'on a une instance
d'une classe... MovieClip par exemple est une classe et tous tes clips
sur la scène ou que tu crées dynamiquement avec attachMovie ou
createEmptyMovieClip sont des instances !

4 - nom de liaison = nom dans le panneau de liaison (bouton droit sur le
symbole dans la biblio)



Les Noms de liaison/d'intance/etc c'est ok de ce côté, mais merci pour
la piqure de rappel ;)



Code AS du movie 'Block':
class Block {
// doit créer une instance du movie 'Plugin' dans l'instance 'Block'
this.attachMovie("Plugin", "obj", 1);
}




Si tu attaches une classe sur un MovieClip, il est préférable que tu
hérites cette classe de MovieClip :

class Block extends MovieClip {
// ici contenu de ta classe
}




!!! ELLE EST LA, LA SOLUTION !!! Je pensais bêtement qu'une class liée à
un MovieClip héritait de la class MovieClip, ET BIEN NON !! (Sot que
suis-je), je rajoute les 'extends MovieClip' et normalement c'est ok...


Ensuite ... tu devrais lire la doc pour créer des classes AS2 plutot !

Il faut un constructeur dans toutes tes classes qui est la fonction qui
initialise ton instance à chaque création de celle ci !

class Block extends MovieClip {

// --- constructor
function Block () {
// ici le code qui doit être lancé à l'initialisation de
l'instance !
}

}

Aussi si tu oublies cela et bien tu risque d'avoir des probèmes !

Pour la suite... il faut pas oublier que tes classes AS2 ne sont pas
"dynamique" par défaut !!!

Cela signifie qu'en AS2 faut déclarer toutes tes propriétés (variables)
contenues dans ton objet (instance)

Si tu veux créer un sous objet (obj) dans ton clip tu dois définir celui
ci en propriété publique ou privée :

class Block extends MovieClip {

// --- constructor
function Block () {
// ici le code qui doit être lancé à l'initialisation de
l'instance !
attachMovie("Plugin", "obj", 1) ; // là je peux créer mon clip
par exemple !
}

// ---- Public Property

public var obj:MovieClip ; // je défini mon objet

}

Code sur ma scene
this.attachMovie("Block","Block1",1);

Normalement, cette suite de code devrait créer une liste d'objets
organisés comme suit:

_level0
|
-- Block1
|
-- obj

Mais non ! Ca ne marche pas comme ca, le résultat est plus étrange, je
n'ai que :

_level0
|
-- Block1

Note: j'ai vérifié que le constructeur Block a bien été appelé et
c'est le cas...




Tu as vérifié ? et comment ? Dans ton code au dessus j'en vois pas de
constructeur ? Ne me dis pas que tu as oublié de le mettre hein ! ;) Si
c'est le cas la prochaine fois soit + attentif et pose correctement ta
question ;)




Bah ! Dans mon exemple, j'ai oublié mon constructeur, dans mon code de
test non...

A moins que l'on ne puisse créer dynamiquement une instance dans une
instance ???




On peut créer dynamiquement créer une instance dans une autre en mettant
la classe en dynamique !


dynamic class Block extends MovieClip {

// --- constructor
function Block () {
// ici le code qui doit être lancé à l'initialisation de
l'instance !
attachMovie("Plugin", "obj", 1) ; // là je peux créer mon clip
par exemple !
}

// ---- Public Property

// public var obj:MovieClip ; // je défini mon objet

}

Voilà en gros ce qu'il faut faire ... Tout cela est expliqué dans la doc
en la lisant doucement et en faisant plusieurs petits tests ;)



2 jours de tests et de lecture forum/doc/web (si si c'est vrai), je
change de lunettes et je grossi les caractères à l'écran.


Je te conseille de compléter tout cela avec les tutoriaux que tu peux
trouver ici : http://wiki.media-box.net/tutoriaux/flash#heritage_et_classes

EKA+ :)



En attendant, un grand merci des ta/tes réponses...

Je repars sur mon projet avec le sourir...
Avatar
ekameleon
Hello :)


Ca valais le coup puisque tu m'as apporter la réponse...



Je t'aurai répondu pareil sur l'autre ;)

Sinon c'est cool que maintenant cela aille mieux ;) Bonne continuation :)

EKA+ :)