La syntaxe du Lingo est très simple et très lisible, elle rappelle (de loin) le Basic ou le Pascal. Lingo est un dérivé ou dialecte du langage HyperTalk utilisé dans le logiciel auteur HyperCard distribué sur les MacIntosh à partir de 1986. Il a été prévu au départ pour être le plus lisible possible pour les anglophones.
Sa syntaxe s'est peu à peu rapprochée de la norme objet (syntaxe à point).
Utilisent uniquement des variables et fonctions globales. Leur utilisation doit rester limitée car les variables globales posent des problèmes au niveau de la ram.
On utilise autant que possible les script objets, les script procéduraux uniquement quand c'est nécessaire.
Ce sont les scripts utilisés pour le code procédural.
Ces scripts reçoivent quelques fonctions-événements prédéfinis qui correspondent à l'ouverture de l'application, sa fermeture, le rafraichissement d'image.
Evenements d'ouverture et clôture:
Evenements de rafraichissement d'image:
Evenement indépendant:
Evenements souris:
Ce sont des scripts qui se trouvent directement à l'intérieur d'un acteur. Leur type n'est pas défini mais ils fonctionnent comme les "movie script".
Ils reçoivent les évènements de souris et de rafraichissement lorsqu'une instance de l'acteur est visible.
Il existe 4 types de scripts en Lingo, deux de type procédural, deux de type objet:
Le Lingo est un langage propriétaire, il n'en existe donc qu'une seule implémentation.
Depuis sa version MX2004, le logiciel Director accepte l'usage de deux langages différents : le Lingo, et une implémentation de Javascript/ECMAScript qui exécute une grosse partie des opérations lingo.
Permettent de simuler des classes d'objet. La syntaxe des méthodes reste procédurale : il faut faire passer une référence à l'objet "me" en premier argument.
-- propriétés property pNombre -- méthodes constructeur et destructeur on new me, n , obj pObject = obj pNombre = n return me end on delete me pObject = void end -- méthodes utilisateur on incremente me pNombre = pNombre +1 end
Si ce script se nomme "nombre", on l'instanciera par exemple de cette manière :
monNouveauNombre = new(script "nombre", 10, obj)
et on invoquera sa fonction "incremente" de cette manière :
monNouveauNombre.incremente()
Un script parent peut servir de classe statique.
On accède à sa référence comme ceci:
myStaticClass = Script("script_name")
L'héritage en lingo ne fonctionne pas comme dans les langages objet classiques, il se base sur la propriété "ancestor" des script parents, qui correspond à une instance de la classe-mère. Il ne s'agit donc pas d'héritage mais d'une surcharge.
Director remonte automatiquement aux propriétés de l'objet ancestor depuis la référence fille ce qui permet de retrouver l'effet d'une classe héritée. Attention donc à la valeur de l'argument "me": il doit toujours correspondre à l'instance de dernière génération.
Cela ne marche pas pour toutes les propriétés et méthodes des classes natives de director (auquel cas il faut pointer l'ancestor).
property ancestor on new ( me ) -- sous classe de l'objet list ancestor = [1,10,20,30] return me -- attention: on ne renvoie pas "ancestor" mais "me" end
obj=new Script( "testClass" ) put obj[ 1 ] -- on retrouve les propriétés de l'ancestor
Ce sont des objets complexes dont le script n'est pas directement accessible. Ils contiennent de nombreux événements permettant d'interagir avec les sprites, la souris, le clavier, par exemple pour créer des boutons ou des éditeurs de texte.
Les scripts de comportement sont souvent développés pour être réutilisés par des graphistes ou intégrateurs. Par un simple drag and drop ces scripts se rattachent à des objets de la scène: image, sprite, acteur. Ces scripts ont des fonctions prédéfinies qui permettent de paramétrer manuellement les instances de même que les composants flash.