Syntaxe
Exécute son corps une fois par image : la boucle d'images d'un jeu classique. Le code avant DO s'exécute d'abord une fois, le code après LOOP une fois quand EXIT quitte la boucle.
[<statements>]
DO
<statements>
Sync()
LOOP
[<statements>]S’écrit aussi : DO, LOOP
Les éléments
| <statements> | Avant DO : la mise en place, exécutée une fois. Entre DO et LOOP : le corps de chaque image. Après LOOP : exécuté une fois, après EXIT. |
|---|
À savoir
- Un seul
DO … LOOPpar programme, au premier niveau uniquement. Pas dans un IF, une boucle ou une FUNCTION : "DO/LOOP is supported once, at top level only". - Le corps doit appeler Sync(), Swap() ou
YieldTask()pour rendre la main à l'image. Sinon le compilateur répond "DO/LOOP requires SYNC() so the loop can yield a frame". - En AGK et DarkBASIC, DO … LOOP est une simple boucle sans fin. Ici, c'est la boucle d'images. Pour toute autre boucle, prenez WHILE ou REPEAT.
DO WHILE,DO UNTIL,LOOP WHILEetLOOP UNTILn'existent pas. CONTINUEdans la boucle d'images saute le Sync() placé plus bas. S'il se déclenche à chaque tour, le jeu se fige. Placez Sync() avant leCONTINUE.- N'écrivez pas de
FUNCTION main()dans un programme avec une boucle DO : la boucle est compilée sous ce nom, les deux entrent en collision et la boucle ne tourne jamais. Rien ne vous prévient. ENDdans la boucle arrête le programme et saute le code aprèsLOOP. Wait() et Sleep() sont refusés aprèsLOOP.
Exemple
frames = 0Console("start") ' startDO frames = frames + 1 IF frames = 3 THEN EXIT Sync()LOOPConsole("left after " + Str(frames)) ' left after 3Dans le manuel : La boucle de jeu et les tâches