override du constructeur TextField en AS3

49 views
Skip to first unread message

Ejoe

unread,
Nov 25, 2011, 5:07:14 AM11/25/11
to FCNG
Bonjour à tous,

il fut une époque (bien lointaine), où j'avais posté un problème (en
AS1), sur ce groupe. Entre temps, j'ai arrêté de coder, et je m'y
remet (je fais le grand écart entre AS1 et AS3)...
Enfin voilà, il s'agissait à l'époque de surcharger le constructeur de
la classe TextField afin que tous mes TextField créé à partir de l'IDE
lance un bout de code à leur initialisation.
Le pb, c'est que je souhaiterais reproduire ce comportement en AS3
mais j'ai le compiler qui m'envoie une erreur 1000 en me disant qu'il
y a une ambiguité sur le constructeur TextField...
Pour rappel, voici le thread de l'époque:
http://groups.google.com/group/fcng/browse_thread/thread/6c3cc8b5f38ec655/1ea58ae70aa0ba38?lnk=gst&q=TextField+override#1ea58ae70aa0ba38

Si quelqu'un à une idée, je vous remercie d'avance.


Ejoe
PS : ci-dessous un exemple de test pas concluant.
<code>
package {
import flash.display.Sprite;
import flash.text.TextField;
public class TextField extends Sprite {

override public function TextField() {
super();
trace("overridé");

}

}

}
</code>

ekameleon

unread,
Nov 25, 2011, 6:54:47 AM11/25/11
to fc...@googlegroups.com
Hello :)

Une fonction constructeur en AS2 ou AS3 doit avoir le nom de la classe et c'est tout!

En aucun cas elle doit avoir le mot clé override et surtout le nom de la superclasse.

Lis bien la doc de l'AS3 au sujet de l'héritage des classes avec le mot clé super etc.

EKA+ :)
> --
> Vous recevez ce message, car vous êtes abonné au groupe Google Groupes FCNG.
> Pour envoyer un message à ce groupe, adressez un e-mail à fc...@googlegroups.com.
> Pour vous désabonner de ce groupe, envoyez un e-mail à l'adresse fcng+uns...@googlegroups.com.
> Pour plus d'options, consultez la page de ce groupe : http://groups.google.com/group/fcng?hl=fr
>
>

Ejoe

unread,
Nov 25, 2011, 8:55:06 AM11/25/11
to FCNG
Salut EKA!
Quelle coïncidence, j'avais lu ton article sur les prototypes et
l'overriding. Très bien fichu. Mais apparemment je dois pas être futé
car malgré çà je tourne en boucle:
Effectivement le override est de trop et je ne peux pas utiliser le
nom de la superclasse, mais il y a un truc que je ne pige pas.
Shématiquement, j'imaginais qu'il fallait recopier la classe quelque
part, écraser la classe TextField par une nouvelle en créant un
nouveau constructeur, et réassocier tout le prototypage de la classe
originale (qui se trouve contenu sous un autre nom) sur la nouvelle
classe TextField que je viens de créer. çà c'était en AS1. J'ai bien
compris qu'il y avait maintenant 2 formes de déclarations (traits et
prototype), et que çà ne se passe plus exactement comme avant. Mais
dans tous les cas, le compiler est moins permissif qu'avant
quelquesoit mon approche il m'envoit ch?!#!r.
Ma question est : est ce que schématiquement çà fonctionne comme je
viens de le décrire plus haut (avec des aménagements), ou l'overriding
des classes natives n'est plus du tout permises dans les mêmes
conditions?

Ejoe

On 25 nov, 12:54, ekameleon <ekamel...@gmail.com> wrote:
> Hello :)
>
> Une fonction constructeur en AS2 ou AS3 doit avoir le nom de la classe et
> c'est tout!
>
> En aucun cas elle doit avoir le mot clé override et surtout le nom de la
> superclasse.
>
> Lis bien la doc de l'AS3 au sujet de l'héritage des classes avec le mot clé
> super etc.
>
> EKA+ :)
>

> Le vendredi 25 novembre 2011, Ejoe <ekork...@noos.fr> a écrit :> Bonjour à tous,


>
> > il fut une époque (bien lointaine), où j'avais posté un problème (en
> > AS1), sur ce groupe. Entre temps, j'ai arrêté de coder, et je m'y
> > remet (je fais le grand écart entre AS1 et AS3)...
> > Enfin voilà, il s'agissait à l'époque de surcharger le constructeur de
> > la classe TextField afin que tous mes TextField créé à partir de l'IDE
> > lance un bout de code à leur initialisation.
> > Le pb, c'est que je souhaiterais reproduire ce comportement en AS3
> > mais j'ai le compiler qui m'envoie une erreur 1000 en me disant qu'il
> > y a une ambiguité sur le constructeur TextField...
> > Pour rappel, voici le thread de l'époque:
>

> http://groups.google.com/group/fcng/browse_thread/thread/6c3cc8b5f38e...

YopSolo

unread,
Nov 27, 2011, 7:52:31 AM11/27/11
to FCNG
Salut,

Changer le proto des objets natifs (as1, js), c'est pratique mais il y
a des effets pervers au niveau des perfs (conso mémoire, vitesse
d'exec) car tous les objets vont hérité des methodes même si ils n'en
ont pas besoin.

En as3 tu peux appliquer ton code spécifique uniquement là ou cela est
nécessaire via l'héritage.

en pratique cela donne ça :

// fichier MyTextfield.as à la racine de ton projet
package
{
import flash.text.TextField;

public class MyTextfield extends TextField
{

public function MyTextfield() // ton constructeur de classe
{
trace("mon code spécifique");
}

}

}

// dans Main.as

var customTextField:MyTextfield = new MyTextfield(); // ton objet
custom
var nativeTextField:TextField = new TextField(); // l'objet natif


dans ta console tu auras 1 seul trace : "mon code spécifique"

Ejoe

unread,
Nov 28, 2011, 6:16:17 AM11/28/11
to FCNG
Salut YopSolo!
Je suis assez d'accord avec toi, mais dans mon cas, j'ai besoin
d'avoir un comportement particulier pour tous les champs de textes. Y
compris ceux créé avec l'IDE. Ma seule solution est d'overrider, il me
semble le constructeur de la classe native TextField...
Pour info, je n'est pas la main sur les champs de texte créé via
l'IDE. La seule chose que je peux faire est d'importer des classes
dans mon fla.

Ejoe

Loyat Marc

unread,
Nov 28, 2011, 8:41:00 AM11/28/11
to fc...@googlegroups.com
Hello,

alors, tu ne pourras pas "écraser" ou modifier la classe TextField en as3 comme il était possible de le faire avec des classes as1 et sa légendaire souplesse digne des plus grand contorsionnistes !
Ce que tu peux faire en revanche s'il faut que tu appliques qqc à tous champs textes créés dans l'IDE, c'est créer un écouteur sur tous les ajouts (ADDED_TO_STAGE) en capture qui te permettra de tester si tu as à faire avec un champ texte ou non et de faire la modif ad-hoc


a+

Marc

2011/11/28 Ejoe <ekor...@noos.fr>

Ejoe

unread,
Nov 28, 2011, 9:04:44 AM11/28/11
to FCNG
Salut Marc, c'est la piste pour laquelle j'ai opté finalement...Merci
à tous. Et si je trouve une autre solution, je vous tiens au courant.

Ejoe

On 28 nov, 14:41, Loyat Marc <marc.lo...@gmail.com> wrote:
> Hello,
>
> alors, tu ne pourras pas "écraser" ou modifier la classe TextField en as3
> comme il était possible de le faire avec des classes as1 et sa légendaire
> souplesse digne des plus grand contorsionnistes !
> Ce que tu peux faire en revanche s'il faut que tu appliques qqc à tous
> champs textes créés dans l'IDE, c'est créer un écouteur sur tous les ajouts
> (ADDED_TO_STAGE) en capture qui te permettra de tester si tu as à faire
> avec un champ texte ou non et de faire la modif ad-hoc
>
> a+
>
> Marc
>

> 2011/11/28 Ejoe <ekork...@noos.fr>

Reply all
Reply to author
Forward
0 new messages