J'ai une méthode d'assistance qui a été créée et qui permet à une classe basée sur MovieClip dans le code d'avoir le constructeur appelé. Malheureusement, la solution n'est pas complète car le rappel MovieClip onLoad() n'est jamais appelé.Comment créer dynamiquement une classe basée sur MovieClip Actionscript 2 avec
(Lien vers le Flashdevelop thread qui a créé la méthode.)
Comment la fonction suivante peut être modifiée de manière à la fois le constructeur et onLoad() est correctement appelé.
//------------------------------------------------------------------------
// - Helper to create a strongly typed class that subclasses MovieClip.
// - You do not use "new" when calling as it is done internally.
// - The syntax requires the caller to cast to the specific type since
// the return type is an object. (See example below).
//
// classRef, Class to create
// id, Instance name
// ..., (optional) Arguments to pass to MovieClip constructor
// RETURNS Reference to the created object
//
// e.g., var f:Foo = Foo(newClassMC(Foo, "foo1"));
//
public function newClassMC(classRef:Function, id:String):Object
{
var mc:MovieClip = this.createEmptyMovieClip(id, this.getNextHighestDepth());
mc.__proto__ = classRef.prototype;
if (arguments.length > 2)
{
// Duplicate only the arguments to be passed to the constructor of
// the movie clip we are constructing.
var a:Array = new Array(arguments.length - 2);
for (var i:Number = 2; i < arguments.length; i++)
a[Number(i) - 2] = arguments[Number(i)];
classRef.apply(mc, a);
}
else
{
classRef.apply(mc);
}
return mc;
}
Un exemple d'une classe que je veux créer:
class Foo extends MovieClip
Et quelques exemples de la façon dont je en créer la classe dans le code:
// The way I most commonly create one:
var f:Foo = Foo(newClassMC(Foo, "foo1"));
// Another example...
var obj:Object = newClassMC(Foo, "foo2"));
var myFoo:Foo = Foo(obj);
Merci pour la supercherie AS2! Problème différent cependant. Un MovieClip défini dans la bibliothèque est défini sur une classe. Au moment de l'exécution, je veux ajouter des instances de cette classe à la scène et être en mesure de transmettre des arguments au ctor. Ma fonction newClassMC() appelle le ctor mais onLoad() ne se produit pas. – tronster
Vous ne pouvez tout simplement pas faire cela avec Movieclips sauf si vous utilisez la composition au lieu de l'héritage. – Luke
Luke, je pense toujours que c'est possible en forçant un onLoad dans la chaîne proto (ou contructor); c'est juste assez compliqué pour me faire tourner la tête. Si ce n'est pas possible, j'aimerais savoir pourquoi. – tronster