Syntaxe
Donne à une FUNCTION un nom réservé pour que le Moteur l’appelle lui-même : une fois au départ, à chaque image, à pas fixe, ou lors d’une collision, d’un déclencheur, d’un message ou d’un événement d’animation.
FUNCTION start()
FUNCTION update(<dt>)
FUNCTION fixedUpdate(<step>)
FUNCTION onCollisionEnter(<other>)
FUNCTION onCollisionStay(<other>)
FUNCTION onCollisionExit(<other>)
FUNCTION onTriggerEnter(<other>)
FUNCTION onTriggerExit(<other>)
FUNCTION onMessage(<message>, <data>, <sender>)
FUNCTION onAnimationEvent(<event>, <data>)
FUNCTION main()
ENDFUNCTIONS’écrit aussi : start, update, fixedUpdate, lateUpdate, onCollision, onTrigger, onMessage, onDestroy
Les éléments
| <dt> | Les secondes écoulées depuis l’image précédente, 0.1 au plus. |
|---|---|
| <step> | Le pas fixe de la physique, 1/60 de seconde. |
| <other> | L’autre entité du contact ou du déclencheur. |
| <message> | Le texte du message envoyé par un autre script, par exemple avec EntitySend("door", "open"). |
| <data> | Les données jointes au message ou à l’événement d’animation. |
| <sender> | L’entité qui a envoyé le message. |
| <event> | Le nom de l’événement d’animation. |
À savoir
- Les lignes hors de toute fonction s’exécutent une fois, au chargement du script, avant
start(). C’est la place des déclarationsGLOBALet de la mise en place. - Autres noms acceptés :
onStart,onUpdate,onFixedUpdatepour les trois premiers ;onCollisionetonTriggervalentonCollisionEnteretonTriggerEnter;onAnimEventvautonAnimationEvent. La casse ne compte pas en BASIC : le Moteur reçoit quand même l’orthographe qu’il attend. - Une fonction de cycle de vie ne peut pas être surchargée. Un second
updateest une erreur de compilation : « BASIC lifecycle function cannot be overloaded ». - Pas de Sync() dans
update: l’image se termine quand la fonction rend la main. Pour mesurer le temps, additionnezdt, ou comptez les images dans une tâche avecYieldTask(). - Une erreur dans
updatene l’arrête pas. L’erreur est signalée etupdaterepart à l’image suivante. Unupdatequi dépasse 200 ms pendant 5 images de suite est désactivé. - Un programme avec un
DO … LOOPest exécuté commemain(), de même qu’un programme qui contient Wait(), Sleep(),AWAITTASK,AWAITALLouAWAITANYn’importe où hors d’une fonction, étiquette de tâche comprise. Le Moteur n’appelle alors jamaisstart()niupdate(), et rien ne le signale. Ne déclarez pas votre propreFUNCTION main()dans un tel programme : elle est remplacée sans avertissement. lateUpdateetonDestroygardent leur nom réservé, mais l’éditeur ne les appelle pas sur le script d’une entité à ce jour. Ne comptez pas sur eux.- Vous pouvez toujours appeler ces fonctions vous-même, comme n’importe quelle autre.
Exemple
GLOBAL elapsed# = 0GLOBAL frames AS integer = 0FUNCTION start() Console("ready") ' ready, printed secondENDFUNCTIONFUNCTION update(dt#) elapsed# = elapsed# + dt# frames = frames + 1ENDFUNCTIONFUNCTION onMessage(message$, data, sender) IF message$ = "reset" THEN frames = 0ENDFUNCTIONConsole("loaded") ' loaded, printed firstDans le manuel : Fonctions