Forums Développement Multimédia

Les formations Mediabox
Les formations Mediabox



Débuter en Lingo - 1

Compatible Director. Cliquer pour en savoir plus sur les compatibilités.Par retro2, le 03 mai 2007

Problématique

Vous débutez en lingo et ne savez pas par où commencer.

movie script, parent script, behavior script

Il existe trois types de script lingo: les scripts procéduraux (“movie script”), les classes d'objets (“parent script”), et les comportements (“behaviors”).

- Les movie script sont les plus simples, ils servent à faire de la programmation procédurale pure, avec des variables globales.

- Les “script parent” permettent de faire des classes d'objet.

Pour la programmation procédurale, les “movie script” posent un problème au niveau du garbage collector, ils encombrent la ram et ralentissent le cpu. Pour cette raison, on se sert des “movie script” uniquement comme point d'entrée, et le reste de la programmation procédurale se fait dans des script parent non-instanciés, utilisés en tant que classes statiques.

- Les behaviors sont des objets spéciaux assez compliqués, conçus pour être instanciés manuellement, sans taper de code (leur script n'est pas accessible directement en cliquant), et gérer l'interactivité avec les composants applicatifs (boutons, etc). Ce sont l'équivalent des composants dans flash.

les bibliothèques

Dès que vous tapez une fonction ou un objet amené à etre réutilisé, stockez les dans des librairies externes que vous rangerez à la racine de votre dossier de travail.

le score (timeline)

Il est possible de glisser-déposer des scripts dans le score, mais il s'agit déjà d'une utilisation avancée, utile pour les applications basées sur la timeline.

Pour des applications simples vous pouvez fermer la fenêtre score.

le point d'entrée

Créez un premier script (window>script). Appelez-le “Entry”.

Ce premier script global sera le point d'entrée de votre application. Il vous permettra d'appeler objets et fonctions au fur et à mesure.

Les scripts globaux reçoivent une série d'évènements (des fonctions prédéfinies qui se déclenchent à des instants précis).

Il est conseillé d'appeler ces évenements dans le point d'entrée, et uniquement dans ce script là.

Vous allez faire un simple test sur les principaux evenements du script entry:

 
global releve --variable integer qui stocke des relevés de temps
 
on preparemovie ()
 releve=the milliseconds
 put ("cet evenement se declenche avant l'affichage de la premiere image")
end
 
on stopmovie ()
 put ("cet evenement se declenche quand l'application s'arrête")
end
 
on startmovie ()
 put ("cet evenement se déclenche après l'affichage de la première image")
end
 
on prepareframe ()
 put ("cet evenement se declenche avant l'affichage de chaque image")
 releve=the milliseconds
end
 
on enterframe ()
 put ("cet evenement se declenche après l'affichage de chaque image")
 put ("temps d'affichage de l'image: "& (the milliseconds - releve) &" millisecondes")
 releve=the milliseconds
end
 
on exitframe ()
 put ("cet evenement se declenche avant le prochain prepareFrame")
 put ("temps libre restant au processeur: "& (the milliseconds - releve) &" millisecondes")
end

Observez dans quel ordre s'exécutent les trace.

Maintenant pour forcer l'application à boucler sur sa première image modifiez le dernier evenement:

on exitframe ()
 put ("cet evenement se declenche avant le prochain prepareFrame")
 go to the frame
end

Note importante sur prepareFrame / enterFrame

Ces deux évènements servent de point d'entrée des routines (dit aussi “hartbeat”).

L'évènement prepareFrame est appelé à un intervalle de temps régulier, il faut y insérer un script court dont le temps d'exécution est toujours le même. C'est généralement là qu'on appelle la mesure d'intervalle de temps pour une application time-based.

L'évènement enterFrame est appelé sur le temps disponible qui reste après l'affichage des images, c'est donc là qu'on met le code dont la durée d'exécution est imprévisible. L'essentiel du code de routine est donc appelé sur enterFrame (c'est pourquoi dans les premières versions du flash player, macromedia avait décidé, pour simplifier, de réduire le hartBeat à la fonction enterFrame).

Voici le schéma d'un intervalle de routine. Mettons que vous avez réglé le framerate sur 60 images / seconde, votre intervalle va mesurer environ 16 millisecondes:

- 0 millisecondes: exécution du script prepareFrame

… calculs d'affichage

- X millisecondes: l'ordinateur a fini de calculer l'image à afficher à l'écran

- exécution du script enterFrame

… calculs du script enfterFrame

- Y millisecondes: l'ordinateur a fini d'exécuter le script enterFrame

… le processeur se repose pendant le temps libre restant (si votre application consomme 10% du processeur, ce temps va être d'environ 90% de 16 millisecondes, soit 14,4 millisecondes)

- 16 millisecondes: exécution du script exitFrame

Conclusion

Vous avez désormais une approche pour attaquer l'apprentissage du lingo… bon courage!