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


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » Функции для работы с группами.
Функции для работы с группами.
rixt7956Дата: Среда, 23 Февраля 2011, 20:46:02 | Сообщение # 1
9 уровень
Группа: Проверенные
Сообщений: 1097
Награды: 0
Репутация: 153
Блокировки:


Чуть позже выложу по больше функций :)


Сообщение отредактировал rixt7956 - Среда, 23 Февраля 2011, 20:55:53
 

FaionДата: Среда, 23 Февраля 2011, 21:45:10 | Сообщение # 2
10 уровень
Группа: Проверенные
Сообщений: 1894
Награды: 0
Репутация: 430
Блокировки:
Спасибо за изобретение велосипеда. Но я предпочту делать тоже самое в 1 строку стандартной командой >_<

О нас думают плохо лишь те, кто хуже нас, а те кто лучше нас... Им просто не до нас.
My Project: Nindogatari
MAL
 

rixt7956Дата: Среда, 23 Февраля 2011, 21:49:20 | Сообщение # 3
9 уровень
Группа: Проверенные
Сообщений: 1097
Награды: 0
Репутация: 153
Блокировки:
Faion, Не, это лучше, и при вызове функции, на сколько мне известно ты всё пишешь в одну строку, тем более бж лучше не использовать так как та вызывает ещё одну бж+использует глобалки, и каждый вызов бж, это обращенье к blizzard.j
 

MuradorДата: Среда, 23 Февраля 2011, 21:56:36 | Сообщение # 4
Группа: Проверенные
Сообщений: 1221
Награды: 1
Репутация: 446
Блокировки:
rixt7956, читая твои умопомрачения я понял
что в blizzard.j настолько крутые функции, что ссылаются сами на себя (эдакий цикл длинною в бесконечность)

а вообще не вижу смысла в этом, спасибо

 

rixt7956Дата: Среда, 23 Февраля 2011, 21:58:43 | Сообщение # 5
9 уровень
Группа: Проверенные
Сообщений: 1097
Награды: 0
Репутация: 153
Блокировки:
Murador, ну раскрой её и сам в этом убедись, там forgroup идёт
 

MuradorДата: Среда, 23 Февраля 2011, 22:01:21 | Сообщение # 6
Группа: Проверенные
Сообщений: 1221
Награды: 1
Репутация: 446
Блокировки:
rixt7956, окей, тогда скажи зачем в "твоем суперкоде" ссылаться опять же на функции этих .j делай с нуля епти, ты же такой крутой тебя не устраивает обычная функция, свою пишешь =_=

чую русским духом пахнет, буржуи гавно росия вперед

Сообщение отредактировал Murador - Среда, 23 Февраля 2011, 22:03:27
 

rixt7956Дата: Среда, 23 Февраля 2011, 22:05:17 | Сообщение # 7
9 уровень
Группа: Проверенные
Сообщений: 1097
Награды: 0
Репутация: 153
Блокировки:
Murador, оптимизация не твой профиль, хотя тебя трудно будет переубедить, я это делать и не буду, так как тему создал не для срача
 

FaionДата: Четверг, 24 Февраля 2011, 13:47:56 | Сообщение # 8
10 уровень
Группа: Проверенные
Сообщений: 1894
Награды: 0
Репутация: 430
Блокировки:
Quote (rixt7956)
Faion, Не, это лучше, и при вызове функции, на сколько мне известно ты всё пишешь в одну строку, тем более бж лучше не использовать так как та вызывает ещё одну бж+использует глобалки, и каждый вызов бж, это обращенье к blizzard.j

Во первых, локалки хоть и быстрее(причем далеко не всегда), но не дают весомого прироста к производительности.

Уж поверь, твой пример не дает никакой прибавки к производительности, а даже наобарот. Куда умнее было оптимизировать бжшку и получить это:

Code
function CountUnitsInGroupEnum takes nothing returns nothing
      bj_groupCountUnits = bj_groupCountUnits + 1
endfunction

function CountUnitsInGroup takes group g returns integer
      ForGroup(g, function CountUnitsInGroupEnum)
      return bj_groupCountUnits
endfunction

Твой вариант в сравнении с моим медленее раз в 5-10 минимум.

Это так же быстрее раз в 10 чем твой бредокод:

Code
function GroupAddGroupEnum takes nothing returns nothing
      GroupAddUnit(bj_groupAddGroupDest, GetEnumUnit())
endfunction

function GroupAddGroup takes group sourceGroup, group destGroup returns nothing
      bj_groupAddGroupDest = destGroup
      ForGroup(sourceGroup, function GroupAddGroupEnum)
endfunction

В общем как я и говорил выше, незачем изобретать велосипеды.


О нас думают плохо лишь те, кто хуже нас, а те кто лучше нас... Им просто не до нас.
My Project: Nindogatari
MAL


Сообщение отредактировал Faion - Четверг, 24 Февраля 2011, 13:48:40
 

rixt7956Дата: Четверг, 24 Февраля 2011, 13:51:10 | Сообщение # 9
9 уровень
Группа: Проверенные
Сообщений: 1097
Награды: 0
Репутация: 153
Блокировки:
Faion, Некоторые спорят и говорят что ForGroup медленее цикла, а не которые говорят наоборот, вот этот вариант на цикле, что быстрее ForGroup или цикл я не знаю.
 

FaionДата: Четверг, 24 Февраля 2011, 13:52:55 | Сообщение # 10
10 уровень
Группа: Проверенные
Сообщений: 1894
Награды: 0
Репутация: 430
Блокировки:
Quote (rixt7956)
Faion, Некоторые спорят и говорят что ForGroup медленее цикла, а не которые говорят наоборот, вот этот вариант на цикле, что быстрее ForGroup или цикл я не знаю.

Вообще то это тот же цикл, в котором нету ничего лишнего, он быстре, как минимум быстрее твоих 2! циклов. Массивов и тонн локалок.


О нас думают плохо лишь те, кто хуже нас, а те кто лучше нас... Им просто не до нас.
My Project: Nindogatari
MAL
 

rixt7956Дата: Четверг, 24 Февраля 2011, 13:57:21 | Сообщение # 11
9 уровень
Группа: Проверенные
Сообщений: 1097
Награды: 0
Репутация: 153
Блокировки:
Faion, ладно, убедил, просто я не юзаю forgroup потомучто надо создовать лишние глобалки( ну в смысле для одного типа одну глобалку), к примеру разве можно нанести урон группе, не занося сначала юнита который наносит урон в глобалку. :)

Добавлено (24-02-2011, 13:57)
---------------------------------------------

Quote (Faion)
тонн локалок.
4 - 5 это не тона :)


Сообщение отредактировал rixt7956 - Четверг, 24 Февраля 2011, 13:59:40
 

FaionДата: Четверг, 24 Февраля 2011, 14:00:00 | Сообщение # 12
10 уровень
Группа: Проверенные
Сообщений: 1894
Награды: 0
Репутация: 430
Блокировки:
Quote (rixt7956)
4 - 5 это не тона

Относительно стандартных или приведенных мной, тонна.


О нас думают плохо лишь те, кто хуже нас, а те кто лучше нас... Им просто не до нас.
My Project: Nindogatari
MAL
 

rixt7956Дата: Четверг, 24 Февраля 2011, 14:01:25 | Сообщение # 13
9 уровень
Группа: Проверенные
Сообщений: 1097
Награды: 0
Репутация: 153
Блокировки:
Quote (Faion)
тонна.

Quote (rixt7956)
takes group g

Quote (rixt7956)
local unit array u

Quote (rixt7956)
local integer i=0

Quote (rixt7956)
local integer k=0

разве тона?


Сообщение отредактировал rixt7956 - Четверг, 24 Февраля 2011, 14:01:56
 

FaionДата: Четверг, 24 Февраля 2011, 14:04:26 | Сообщение # 14
10 уровень
Группа: Проверенные
Сообщений: 1894
Награды: 0
Репутация: 430
Блокировки:
Ну если рассматривать твой пример, то там массив не нужен, и делается тоже самое в 1 цикл. Но ты юзаешь массив, а массив это группа однотипных переменных, и он собой создает тонну не нужных данных которые висят в памяти.

О нас думают плохо лишь те, кто хуже нас, а те кто лучше нас... Им просто не до нас.
My Project: Nindogatari
MAL
 

rixt7956Дата: Четверг, 24 Февраля 2011, 14:09:37 | Сообщение # 15
9 уровень
Группа: Проверенные
Сообщений: 1097
Награды: 0
Репутация: 153
Блокировки:
Quote (Faion)
тоже самое в 1 цикл
М.б выложишь пример :)
 

FaionДата: Четверг, 24 Февраля 2011, 14:16:49 | Сообщение # 16
10 уровень
Группа: Проверенные
Сообщений: 1894
Награды: 0
Репутация: 430
Блокировки:
Ну вот стандартный пример для работы с группами, который по сути все и используют.

Code
function CustomForGroup takes group eg returns nothing
   local unit pu

   // Проверяем, существует ли группа
   if (eg == null) then
     return
   endif

   loop
     // Берём первого из групы
     set pu = FirstOfGroup(eg)
     // Проверяем не равен ли он нулю, если да то выходим
     exitwhen (pu == null)
     // Убираем пикнутого юнита из групы, тем самым мы имитируем продвижение по её массиву
     call GroupRemoveUnit(eg, pu)

     if (>>Твой фильтр для пикнутого юнита<<) then
       //Твои действия с пикнутым юнитом
     endif

   endloop

endfunction

Обе задачи реализуются используя этот алгоритм.


О нас думают плохо лишь те, кто хуже нас, а те кто лучше нас... Им просто не до нас.
My Project: Nindogatari
MAL
 

rixt7956Дата: Четверг, 24 Февраля 2011, 14:21:39 | Сообщение # 17
9 уровень
Группа: Проверенные
Сообщений: 1097
Награды: 0
Репутация: 153
Блокировки:
Faion, Да просто супер функция которая отлично почистит любую группу, а в моей все юниты остаются в группе. :)

Сообщение отредактировал rixt7956 - Четверг, 24 Февраля 2011, 14:26:47
 

FaionДата: Четверг, 24 Февраля 2011, 14:31:47 | Сообщение # 18
10 уровень
Группа: Проверенные
Сообщений: 1894
Награды: 0
Репутация: 430
Блокировки:
Хочу сказаь такую умную вещь, дабы вы избегали ошибок. То что локалки дают большой прирост к производительности - миф.
Не редко они даже ее понижают.(Тут нубы которые считают себя отцами должны начать орать что я не шарю).

Локальные переменные, это переменные о которых знает только функция в которую они вложены. Что это нам дает:
Во первых при создании огромных программ с тысячами функций нам бы пришлось придумывать огромное кол-во глобалок.
Огромное количество глобалок - существенный минус, очень сложно править код. Могут быть проблемы если 1 и та же переменная используется многократно. Весь код становится сильно зависимым.

Тут перечислять можно долго. Однако локалками злоупотреблять не стоит. Их стоит использовать только для обозначения переменных которые могут быть использованы внутри функции и более нигде. Т.е. нету ничего плохого в использовании функциями БЖ, бжшных переменных, другой вопрос что внутри многих функций как правило лишние действия\проверки\дублирование обращений\подмена нативок собой.

Если подвести итог, то не стоит стремится использовать везде только локалки, или только глобалки, необходима золотая середина, с помощью глобалок можно легко передавать данные.


О нас думают плохо лишь те, кто хуже нас, а те кто лучше нас... Им просто не до нас.
My Project: Nindogatari
MAL
 

rixt7956Дата: Четверг, 24 Февраля 2011, 14:34:47 | Сообщение # 19
9 уровень
Группа: Проверенные
Сообщений: 1097
Награды: 0
Репутация: 153
Блокировки:
Faion, Хорошо написал, только к чему это, я уже с тобой согласился на счёт ForGroup
 

FaionДата: Четверг, 24 Февраля 2011, 14:41:28 | Сообщение # 20
10 уровень
Группа: Проверенные
Сообщений: 1894
Награды: 0
Репутация: 430
Блокировки:
Это уже про локалки, все как только узнают о локалках, сразу думают, что локалки это круто, и начинают их использовать везде, а потом пишут код, типо того что у тебя=) Вместо того что бы сделать компактный код, с использованием пары глобалок.

О нас думают плохо лишь те, кто хуже нас, а те кто лучше нас... Им просто не до нас.
My Project: Nindogatari
MAL
 

lawsonДата: Пятница, 25 Февраля 2011, 12:12:12 | Сообщение # 21
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
Quote (Faion)
строку стандартной командой

Такой же. это просто займет много места в триггере - нафиг оно.


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

FaionДата: Пятница, 25 Февраля 2011, 12:14:42 | Сообщение # 22
10 уровень
Группа: Проверенные
Сообщений: 1894
Награды: 0
Репутация: 430
Блокировки:
Quote (lawson)
росто займет много места в триггере - нафиг оно

Размер- ничего не значит, самое главное в любой функции\алгоритме = стабильность, оптимальный способ решения задачи, скорость работы, ресурсоёмкость.


О нас думают плохо лишь те, кто хуже нас, а те кто лучше нас... Им просто не до нас.
My Project: Nindogatari
MAL
 

lawsonДата: Пятница, 25 Февраля 2011, 12:18:05 | Сообщение # 23
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
Дальше тему я не читал твоего сообщения.
А вообще я ни че непонял в этой теме что вообще хотел сделать он, просто подсчитать кол-во юнитов в группе?


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

FaionДата: Пятница, 25 Февраля 2011, 12:22:44 | Сообщение # 24
10 уровень
Группа: Проверенные
Сообщений: 1894
Награды: 0
Репутация: 430
Блокировки:
Он дал аналог существующим BJ функциям, причем весьма не оптимальный и я ему объяснил почему его функции даже хуже, чем те, объяснил почему разумно пользоватся теми BJ, и дал свой пример решения данной проблемы, который наиболее оптимальный.

О нас думают плохо лишь те, кто хуже нас, а те кто лучше нас... Им просто не до нас.
My Project: Nindogatari
MAL
 

lawsonДата: Пятница, 25 Февраля 2011, 12:25:54 | Сообщение # 25
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
Quote (rixt7956)
Первая группа та которую надо добавит, вторая, в которую добавляют.

Это даже начинающий наверное поймет.

Добавлено (25-02-2011, 12:25)
---------------------------------------------
Ворос?
bj_wantDestroyGroup - что она делает?


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

Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » Функции для работы с группами.
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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