Le constructeur des classes externes

Dans un souci d'homogénéité, FlashPascal introduit des pseudo-constructeurs sur les classes Flash qui n'en possèdent pas.
En effet, la classe MovieClip par exemple, ne peut pas être instanciée directement en ActionScript2. Il existe par contre trois méthodes pour créer un MovieClip par programme :

  1. la méthode attachMovie() qui permet de créer un clip provenant d'une bibliothèque de clips.
  2. la méthode createEmptyMovieClip() qui permet de créer un nouveau clip enfant.
  3. la méthode duplicateMovieCip() pour dupliquer un clip existant.
Nous nous intéresserons essentiellement à la méthode createEmptymovieClip() et l'utiliserons en lieu et place du constructeur avec la syntaxe suivante:
type
MovieClip = external class constructor Create(Parent: MovieClip; name: string; depth: Number) as Parent.createEmptyMovieClip; end;
Avec cette déclaration, tout appel à "MovieClip.Create" sera automatiquement transformé en un appel à la méthode createEmptyMovieClip du clip passé dans le paramètre "Parent".
Mais quel parent pouvons-nous utiliser pour créer notre premier clip !?
Dans Flash, il existe des objets globaux dont l'objet _root qui est une instance de MovieClip. C'est même le parent de tous les clips de l'animation puisque lui seul permet d'en créer de nouveaux.
Vous pouvez donc créer un nouveau clip de deux façons qui sont en réalité strictement équivalentes :
var
  c1, c2, c3: MovieClip;
begin
  _root.createEmptyMovieClip('c1', 1);
  c2 := MovieClip.Create(_root, 'c2', 2);
  c3 := MovieClip.Create(nil, 'c3', 3);
end;
Je vous ai parlé de deux méthodes et je vous en propose trois, en fait la troisième n'est qu'une variante de la seconde; dans le cas particulier d'un pseudo-constructeur qui attend un paramètre de type MovieClip, FlashPascal remplace automatiquement le mot clé "nil" par une référence à l'objet "_root".
Mais encore une fois, ces trois syntaxes génèrent un code flash strictement identique, et dans les trois cas on fait un appel à "_root.createEmptyMovieClip()"