Сейчас 12:32:00 Пятница, 22 ноября, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: Bru  
[JASS] Урок 2. Потоки, синхронность, структура триггера
DuosoraДата: Среда, 27 Марта 2013, 22:09:36 | Сообщение # 1
The cats never sleep...
Группа: Ветераны
Сообщений: 6734
Награды: 10
Репутация: 2161
Блокировки:
Есть два способа создания дизайна программы. Один из них, это сделать его настолько простым, что в нем, очевидно, не будет недостатков. Другой способ — сделать его настолько запутанным, что в нем не будет очевидных недостатков.
Чарльз Энтони Ричард Хоар


Рад вас видеть снова на втором уроке по языку JASS!
На прошлом уроке мы разобрались, что такое JASS и где его писать. Сегодня я познакомлю вас с более интересными аспектами языка JASS.

Начну урок с объяснения вам того, что такое поток. В бытовом смысле поток - течение, например, воды из крана. Наблюдали, как течёт вода? Точно так же передаются данные по такому же "потоку", только не водному, а информационному. В одном потоке все действия, которые вы хотите совершить, выполняются не параллельно, а друг за другом. Стоит заметить, что в WarCraft 3 настоящий поток только один. На будущее прошу запомнить: таймеры и события используют псведопотоки (кажется, что это настоящие потоки, но это не так). С таймерами мы более подробно познакомимся позднее, а вот события сегодня вам ещё встретятся.

Сталкивались ли вы с понятием "синхронизация"? Думаю, многие знают, что это такое. Противоположное ему понятие "десинхронизация" мы с вами разберём позднее, оно требует кое-каких знаний кода. А вот что такое синхронный и асинхронный код, я расскажу сейчас и покажу на примере, как он реализуется.
Потоки имеют нехорошее свойство перегружаться и заставлять игру зависать. Использование асинхронного кода позволяет движку отвечать на запросы во время выполнения длительных операций в вашей карте. Поэтому предпочтительнее использовать именно такой код. Дело в том, что если использовать синхронный код, тогда при перегрузке потока запущенный WarCraft 3 не будет отвечать ни на какие запросы и попросту зависнет. А в асинхронном коде всё будет так, как будто никакой перегрузки и не было! Красота, которой в GUI добиться крайне сложно без костылей.

Поговорив о потоках и синхронности кода, я спокойно начинаю описывать вам структуру триггера. Ранее я уже говорил, что JASS - язык событийно-ориентированный. Это значит, что действия выполняются в ответ на какое-нибудь событие, если оно удовлетворяет условиям (в случае наличия таковых). Отсюда выводим типовую структуру кода любого триггера: Событие -> Условие -> Действия.
Всё, достаточно теории. Переходим к практике.

Создайте новый триггер. Сконвертируйте его в код. Как это делать, я писал в уроке 1.
Что вы видите? Пока что непонятную, совершенно неструктурированную кашу букв. Будем разбираться. Для начала усвойте простое правило: русскоязычное название триггера для нас криминал, потому что, если, например, триггер называется "Безымянный триггер 001", то его название будет интерпретировано конвертером кода, как "______________________________________001". Зачем вам этот геморой? Поэтому считайте, что я лично вам запретил называть триггеры на русском языке. Ваш триггер всё ещё с русскоязычным названием? Тогда мы идем к Вам!
Я назвал триггер HelloWorld. У меня получилось вот это:
Код
function Trig_HelloWorld_Actions takes nothing returns nothing
endfunction

//===========================================================================
function InitTrig_HelloWorld takes nothing returns nothing
     set gg_trg_HelloWorld = CreateTrigger(  )
     call TriggerAddAction( gg_trg_HelloWorld, function Trig_HelloWorld_Actions )
endfunction


Сначала давайте подумаем, что мы видим знакомого. Да! Нам встречается имя нашего триггера, причём несколько раз. Trig_HelloWorld_Actions, InitTrig_HelloWorld, gg_trg_HelloWorld. Первые два элемента, куда входит знакомое нам название - функции, выполняющие наши действия. Последний - это глобальная переменная, в которой хранится наш триггер. Подчеркну, что функция, имя которой начинается с InitTrig_, обязательна для любого триггера - там как раз и задаётся, где будут события, где условия, а где - действия.
Вкратце (пока что вкратце!) объясню: переменная - это ячейка памяти. Она как коробка: может в себе что-то содержать, а может просто быть пустой. В нашем конкретном случае переменная не пустая.
Мы начнём наше знакомство с программированием на JASS классическим для всех программистов путём: выведем на экран слова "Hello, World!".
Удалите созданный вами триггер, создайте новый с таким же именем и поставьте ему в события "Время - Прошло 0.00 секунд с начала игры". Теперь сконвертируем наш триггер. Появилась новая непонятная для нас пока строка: это событие. Поднимаемся до функции Trig_HelloWorld_Actions, ставим пустую строчку перед endfunction. В ней прописываем то, что выведет наше сообщение: call BJDebugMsg("Hello, World!"). Если всё сделано правильно, то при запуске карты появится надпись: Hello, World!

Всем спасибо, на третьем уроке мы изучим, что такое функции и как они работают.

Домашнее задание:
  • Создайте новую карту размером 32х32, изначально на мелководье.
  • Откройте Редактор триггеров, удалите оттуда все триггеры.
  • Создайте папку "Домашние задания" в Редакторе триггеров.
  • Создайте триггер "Lesson2" в папке "Домашние задания".
  • Выведите текст "Домашнее задание второго урока" спустя 3 секунды после начала игры.
  • Сохраните карту и пришлите мне в ЛС.


Вопросы по теории:
  • Если проводить аналогию программирования с пахотным делом, что является "жнецом" кода?
  • Как написать текст с двойными кавычками в строке в JASS?
  • Проводя аналогию потока с текущей водой, как объяснить на языке программиста внезапную заморозку воды?
  • Проводя аналогию потока с текущей водой, что означает открытие и закрытие крана?
  • Если бы условия и действия поженились и переехали жить к условиям, код был бы асинхронный или синхронный?
  • Как правильно: Jass, JASS, Jass2, J или JASS2, когда речь идёт о языке скриптинга на WarCraft?
  • Можно ли называть триггеры по-корейски?


Ответы также присылайте мне в ЛС. Тот, кто ответит на все вопросы, получает 5+ по начальной теории Jass и от меня и Тузика получает жирный плюс в репутацию.


Не зли других и сам не злись.
Мы - гости в этом мире.
И если что не так - смирись,
Будь поумнее - улыбнись,
Ведь в мире всё закономерно.
Зло, излучённое тобой,
К тебе вернётся непременно.
 

Ramazan(off)Дата: Среда, 27 Марта 2013, 22:59:36 | Сообщение # 2
11 уровень
Группа: Проверенные
Сообщений: 1670
Награды: 1
Репутация: 775
Блокировки:
Я понял и знал это, но могу понять ещё кое-что.
Новички опустят руки после таких заумностей.
 

vladhellgateДата: Среда, 27 Марта 2013, 23:06:15 | Сообщение # 3
7 уровень
Группа: Проверенные
Сообщений: 255
Награды: 0
Репутация: 33
Блокировки:
сказали же в лс... меня переполняют чувства...
 

anreeДата: Среда, 27 Марта 2013, 23:13:46 | Сообщение # 4
3 уровень
Группа: Проверенные
Сообщений: 43
Награды: 0
Репутация: 26
Блокировки:
Цитата (Duosora)
Выведите текст "Домашнее задание второго урока" спустя 3 секунды после начала игры.

на всякий случай спрошу:сделать триггерно Text Message или просто коментарий к триггеру?


 

Ty3uKДата: Четверг, 28 Марта 2013, 00:32:56 | Сообщение # 5
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
У Лавсона ошибка есть, не ссыте.

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

goldplay99Дата: Четверг, 28 Марта 2013, 00:33:29 | Сообщение # 6
1 уровень
Группа: Пользователи
Сообщений: 13
Награды: 0
Репутация: 0
Блокировки:
Или переменная-триггер

Я знаю *ВСЕ*, но *ВСЕ* - ничегошеньки незнает обо мне.
 

lawsonДата: Четверг, 28 Марта 2013, 00:38:55 | Сообщение # 7
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
Ty3uK, пфф, пропали мои +10

Nic nie wiem bo mam chuj.
редактирую посты! ВСЕ!
 

Ty3uKДата: Четверг, 28 Марта 2013, 00:56:02 | Сообщение # 8
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Да я тебе экстерном могу за знания дать trollface
И за то, что ты няшка gays


╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

KakolookiaДата: Четверг, 28 Марта 2013, 07:21:24 | Сообщение # 9
6 уровень
Группа: Проверенные
Сообщений: 220
Награды: 0
Репутация: 93
Блокировки:
А почему именно на мелководье? Это понадобится в следующих уроках?
 

lawsonДата: Четверг, 28 Марта 2013, 11:36:49 | Сообщение # 10
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
Ty3uK, friends

Nic nie wiem bo mam chuj.
редактирую посты! ВСЕ!
 

SirNikolasДата: Четверг, 28 Марта 2013, 12:01:14 | Сообщение # 11
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Асинхронный код на втором уроке? hmm

 

lawsonДата: Четверг, 28 Марта 2013, 12:02:15 | Сообщение # 12
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
Цитата (SirNikolas)
Асинхронный код на втором уроке?

шмуос молодец, может хоть это отпугнет будущих картостроителей от этой затеи.


Nic nie wiem bo mam chuj.
редактирую посты! ВСЕ!
 

Imba_pvLДата: Четверг, 28 Марта 2013, 12:12:32 | Сообщение # 13
10 уровень
Группа: Проверенные
Сообщений: 3151
Награды: 1
Репутация: 1260
Блокировки:
у меня все получилось, Дуосон принимай)

 

Ty3uKДата: Четверг, 28 Марта 2013, 12:55:01 | Сообщение # 14
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Да тут об ассинхронном коде крохи инфы.

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

DuosoraДата: Четверг, 28 Марта 2013, 17:47:07 | Сообщение # 15
The cats never sleep...
Группа: Ветераны
Сообщений: 6734
Награды: 10
Репутация: 2161
Блокировки:
Цитата (Kakolookia)
А почему именно на мелководье? Это понадобится в следующих уроках?

Абсолютно верно. Там будут примеры гораздо разнообразнее.
Цитата (SirNikolas)
Асинхронный код на втором уроке?

С другой стороны, почему бы обзорно не ознакомить?
Цитата (anree)
на всякий случай спрошу:сделать триггерно Text Message или просто коментарий к триггеру?

Всё в уроке ведь написано. Никаких действий в триггере, только руками и кодом.


Не зли других и сам не злись.
Мы - гости в этом мире.
И если что не так - смирись,
Будь поумнее - улыбнись,
Ведь в мире всё закономерно.
Зло, излучённое тобой,
К тебе вернётся непременно.
 

Imba_pvLДата: Четверг, 28 Марта 2013, 18:34:47 | Сообщение # 16
10 уровень
Группа: Проверенные
Сообщений: 3151
Награды: 1
Репутация: 1260
Блокировки:
Duosora, Тебе ответы на вопросы пришли???
Цитата (Fredbob)
как часто будут выходить уроки?

для вопросов есть другая тему


 

anreeДата: Пятница, 29 Марта 2013, 02:40:40 | Сообщение # 17
3 уровень
Группа: Проверенные
Сообщений: 43
Награды: 0
Репутация: 26
Блокировки:
Цитата (Duosora)
Всё в уроке ведь написано. Никаких действий в триггере, только руками и кодом.

А, понял. Мне даже стыдно.


 

Imba_pvLДата: Пятница, 29 Марта 2013, 13:00:26 | Сообщение # 18
10 уровень
Группа: Проверенные
Сообщений: 3151
Награды: 1
Репутация: 1260
Блокировки:
так пришли или нет?

 

DuosoraДата: Пятница, 29 Марта 2013, 14:13:27 | Сообщение # 19
The cats never sleep...
Группа: Ветераны
Сообщений: 6734
Награды: 10
Репутация: 2161
Блокировки:
Цитата (Imba_pvL)
Тебе ответы на вопросы пришли???

Да, прочёл)
Ждите в субботу-воскресенье урок о функциях.


Не зли других и сам не злись.
Мы - гости в этом мире.
И если что не так - смирись,
Будь поумнее - улыбнись,
Ведь в мире всё закономерно.
Зло, излучённое тобой,
К тебе вернётся непременно.
 

Imba_pvLДата: Пятница, 29 Марта 2013, 14:14:40 | Сообщение # 20
10 уровень
Группа: Проверенные
Сообщений: 3151
Награды: 1
Репутация: 1260
Блокировки:
А можно узнать результаты?)
того и того


 

FredbobДата: Суббота, 30 Марта 2013, 05:55:10 | Сообщение # 21
1 уровень
Группа: Пользователи
Сообщений: 14
Награды: 0
Репутация: 0
Блокировки:
Duosora, я конечно не вправе критиковать но если уж показываешь код то объясняй что к чему как что работает и для чего это(прости за прямой текст)
 

DuosoraДата: Суббота, 30 Марта 2013, 13:26:00 | Сообщение # 22
The cats never sleep...
Группа: Ветераны
Сообщений: 6734
Награды: 10
Репутация: 2161
Блокировки:
Цитата (Fredbob)
я конечно не вправе критиковать но если уж показываешь код то объясняй что к чему как что работает и для чего это(прости за прямой текст

Откровенность за откровенность: если я сейчас начну объяснять, как и что работает в этом коде, то всё объяснение не поместится в один пост.


Не зли других и сам не злись.
Мы - гости в этом мире.
И если что не так - смирись,
Будь поумнее - улыбнись,
Ведь в мире всё закономерно.
Зло, излучённое тобой,
К тебе вернётся непременно.
 

FredbobДата: Суббота, 30 Марта 2013, 14:25:05 | Сообщение # 23
1 уровень
Группа: Пользователи
Сообщений: 14
Награды: 0
Репутация: 0
Блокировки:
Duosora, я же не говорю прям все подробно просто общее понятие доступным и простым языком
 

ZikkratДата: Суббота, 30 Марта 2013, 15:01:47 | Сообщение # 24
1 уровень
Группа: Пользователи
Сообщений: 2
Награды: 0
Репутация: 0
Блокировки:
Fredbob,
Цитата (duos)
Иди в гугл, не мозоль глаза.

Добавлено (30 Марта 2013, 15:01:47)
---------------------------------------------
Imba_pvL, Он их сам не знает.

 

Imba_pvLДата: Суббота, 30 Марта 2013, 15:12:42 | Сообщение # 25
10 уровень
Группа: Проверенные
Сообщений: 3151
Награды: 1
Репутация: 1260
Блокировки:
Цитата (Zikkrat)
Он их сам не знает.

???
Дуосон, давай к след.уроку))

Добавлено (30 Марта 2013, 15:12:42)
---------------------------------------------
но сначала скажи результаты


 

  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz