Рейтинг - 4.5 (2)

В этом уроке мы продолжим изучать потоки. На этот раз мы познакомимся с командами gosub и return

Если вы владеете какими то языками программирования, то для Вас это может показаться знакомой вешью. Итак, ознакомимся с тем, как пишется команда gosub:

gosub @POTOK_1

Эта команда переходит на метку "POTOK_1" так же само, как и "jump", только разница том, что шарик будет возвращаться к месту, где этот переход состоялся. Возвращаться он будет когда встретит ближайший return. Следовательно return - команда возврата. Давайте напишем небольшой скрипт, что бы вы поняли как он работает:

:POTOK
thread 'POTOK'
wait 0
gosub @POTOK_1
end_thread

:POTOK_1
wait 0
return

Графически можно представить так:

Давайте проследим за тем, так будет двигаться шарик. Сначала он пройдёт 3 строчки. На 4-й он встретит "gosub", дальше идёт прыжок на 7 строку, так как именно там находится метка "@POTOK_1". Проходит дальше 2 строки и встречает "return". Дальше шарик прыгает обратно на строку, где был "gosub" и продолжает путь, то есть переходит на 5 строку и "уходит на пенсию" =)

Напишем более сложный скрипт, где есть несколько "gosub", и посмотрим на движение шарика:

Что бы вам было легче представить как работают эти 2 опкода, я наведу пример в реальной жизни:

Папа Васе:
- Сын, пойди в магазин.
Вася идёт.
По дороге ему девочка Рита:
- Вася, сорви для меня цветок.
Вася идёт рвать цветы. Возвращается. Девочка благодарит. Вася идёт в магазин, покупает там, и приходит домой. Папа даёт Васе 5 рублей.

Теперь давайте рассмотрим картинку, которая "транслирует" эту историю в Sanny Builder:

Таким образом можно сказать, что поток существует, что бы выполнять одну конкретную задачу, а "gosub" - что бы выполнять вторичные. В нашем примере главная цель - заработать 5 рублей, вторичные цели - купить товар, сорвать цветок. Две вторичные задачи - два "gosub".

И, конечно, не забываем о правилах переходов, которые я написал в предыдущем уроке. Думаю основы работы с потоками и метками вы научились. Пора переходить к новому материалу. Если у вас возникли вопросы, задайте их на форуме.


Теги: gosub, SCM, thread, RETURN

BalashovM   (06.12.15 16:58)
Так, а вот здесь получается, что после команды return мы вернёмся к команде gosub, которая нас отправила чёрте куда, но у нас не будет бесконечный цикл, а будут исполняться команды, написанные после gosub, верно?
И каждому gosub, точнее каждой метке, соответствует свой return?
Вход на сайт

Поиск
Категории раздела
Мини-чат
Пожалуйста, все вопросы по скриптингу задавать на форуме!
Наш опрос
Какие GTA вы прошли ( сюжетная линия )?
Всего ответов: 9
Активность на сайте
Пожертвования
Кошельки WebMoney:
U859420971000
R407741810602
Z331072372430
E314272616890
Друзья сайта
Полезные ресурсы
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Сегодня нас посетили:
Реклама