00047. Циклы ( Часть 2 - for )

Циклы ( Часть 2 - for )|Мы продолжаем изучать циклы и в этом уроке вы познакомитесь с другим типом циклов.|wmysterio|wmysterio||||Вторая часть уроков о циклах посвящена циклу for. Особенностью этого цикла в том, что он может выполнить одну и ту же последовательность действий несколько раз, используя специальный счётчик. Например, этот счётик можно использовать для создания актёров или транспорта. Отличие этого цикла от "while" в том, что мы сами задаём сколько раз нужно обойти цикл, а "while" понятия не имеет сколько раз он будет это делать. Вот просто пример "for":

for 0@ = 0 to 16 step 1
 // ...опкоды...
end

Здесь: 0@ = 0 - назначаем переменную в качестве счётчика 16 - указываем границу, если переменная 0@ будет больше этого числа, то цикл прекращается step 1 - указываем шаг, то есть число, которое будет прибавляться к 0@ после прохождения кода внутри блока. Если шаг равен 1, то писать его не нужно, так как по-умолчанию этот шаг равен 1.

Такой цикл может только прибавлять к переменной шаг, однако есть возможность и убавлять. Вот пример:

for 0@ = 16 downto 0 step 1
 // ...опкоды...
end

Принцип работы такой же, как и в предыдущем примере, только от переменной 0@ будет отниматься 1 ( step ) до тех пор, пока переменная не будет меньше 0 ( downto ). "Зачем он нужен?" - спросите вы. Отвечу. Вот, например, нам нужно создать 5 актёров. Ну 5 - это не так и много, а представьте, что вам нужно создать 100 актёров. Вручную их писать будет только безумец, поэтому и создан этой цикл - для облегчения подобной рутины. Нам нужно только подставить несколько опкодов для создания. Давайте, для примера, создадим скрипт, который будет спавнить 100 автомобилей:

var
$CAR : array 100 of car
end

:CAR
thread 'CAR'
wait 0
gosub @CAR_1
$X = 2493.0298
$Y = -1658.8713
$Z = 13.3487

for $I = 0 to 100 step 1
 $CAR[$I] = car.Create(#MANANA, $X, $Y, $Z)
 car.Angle($CAR[$I]) = 170.1416
 $X += -4.0
end

Model.Destroy(#MANANA)
end_thread

:CAR_1
wait 0
model.Load(#MANANA)
038B: load_requested_models

:CAR_2
wait 0
if
model.Available(#MANANA)
jf @CAR_2
return

Сначала нужно объявить массив автомобилей. Дальше в цикле создаём транспорт, путём изменения индекса, которой изменяется в цикле ( переменная "$I" ) а так же изменяем в цикле координату "$X", чтобы тачки не спавнились в одном месте. Не стоит забывать, что память не резиновая, поэтому не надо злоупотреблять количеством создаваемых игровых объектов.

× **Примечание:** for - это цикл с известным количеством итераций ( повторений ), поэтому задержку здесь не обязательно

Думаю необходимую информацию я вам предоставил. Вам остаётся делать свои тесты. И, для практики, предлагаю вам создать небольшую армию ( Пед "#ARMY" с оружием "#M4" ). Ваши скрипты пишите на форум. Если что не ясно - спрашивайте!|1025|1|0||cikly_chast_2_for|1499000408

Last updated