WME поддерживает два типа циклов: for и while.
Конструкция for задаёт переменную-счётчик, условие выполнения цикла и вычислительную операцию с счётчиком. Перед каждой итерацией цикла проверяется заданное условие. Если оно истинно, то код, помещённый внутри тела цикла, выполняется. Если же нет, код не выполняется, а программа продолжает работу с первой строчки кода, идущей после цикла. После каждой итерации значение переменной-счётчика изменяется в соответствии с заданным правилом.
Пример - цикл перебирает значения с 0 до 9:
for(var i=0; i<10; i=i+1) { // ... некоторый программный код } |
Внимание: WME не поддерживает операторы инкремента (++) и декремента (--).
Цикл while подобен циклу for. Разница в том, что конструкция while не содержит счётчика. Код внутри тела цикла выполняется до тех пор, пока заданное условие истинно.
Пример:
var MyVar = 5; while(MyVar > 0) { MyVar = MyVar - 1; } |
Оператор break используется для прерывания
цикла.
Оператор continue пропускает следующий за ним код в теле цикла и переходит к следующей итерации.
Пример:
actor.GoToAsync(100, 200); while(true) // бесконечный цикл { if(actor.Ready) break; // закончить выполнение цикла, если персонаж остановился Sleep(20); // иначе передать управление движку и продолжить выполнение цикла } |
Конструкция switch позволяет выполнять определённые куски кода, в зависимости от того, какое значение принимает указанное выражение.
switch (выражение)
{
case значение :
программный код
case значение :
программный код
...
default :
программный код
}
В этой конструкции вычисляется указанное выражение и проверяется на соответствие заданным значениям. Когда будет обнаружено совпадение с одним из значений, выполняется программный код от этой метки до оператора break, или же до конца конструкции switch.
Ветка default (по умолчанию) выполняется в том случае, если не было найдено соответствия ни одному из указанных значений. Метка default должна всегда быть последней в списке.
Пример:
switch (Color) { case "чёрный": actor.Talk("Жутко"); break; case "красный": actor.Talk("Красиво"); break; case "жёлтый": actor.Talk("Ярко"); break; default: actor.Talk("Нейтрально"); } |