ELDAR
НИИ 4А-ВО кафедра SPELLS
offline
Опыт:
8,394Активность: |
Ассоциативные массивы или прогоним SCV
ВступлениеИтак , с чего же начинают все ? А вот, статью написать меня подвигло то, что столь практичный метод знает столь малое кол-во народу ( кстати сам недавно о нем узнал ). Статья предназначена для Jass’еров от мала до велика, и если вы не знаете Jass то это статья не представит для вас никакой ценности. Вперёд с песней.Этот метод чем то похож на SCV( System Custom Value ), а именно тем, что к хэндлу привязываются обьекты. Итак нам понадобится функция H2I : Код:
Теперь качаем карту приложенную к статье. Итак ознакомимся с текстом 1-ого триггера Код:
Здесь мы видим привязку глобалки String к только что созданному таймеру. ( не бойтесь 0х100000 – это число в 16-ично системе счисления, без него будет 10-и значное число) Далее : Код:
Здесь мы видим, что создается триггер и на экран выводится его номер, причем эти номера последовательные. Следовательно при привязки глобальных переменных к хэндлу, никогда не будет совпадений в номерах. Теперь отключим первый триггер и включим второй. Собственно они отличаются только лишь одной строкой Код:
в ней уничтожается триггер. И что же мы видим, номера триггеров не меняются. Из этого можно сделать вывод, что при своевременном удалении хэндлов не возникнет ошибок с величиной массивов. Практическое применение :Вобщем данный метод имеет очень большое практическое значение. Я вам покажу этот метод в действии на примере движения снарядов. Пришло время включить последний триггер. Создаем снаряд и записываем его в переменную: Код:
Тут же забиваем в переменную дальность полета снаряда: Код:
И собсвенно запускаем таймер. Теперь расммотрим функцию Move: Код:
Изменяем координаты юнита забитого в переменную Unit с уникальным номером нашего таймера. Далее уменьшаем переменную Real: Код:
Вот собсвенно и всё , я надеюсь что данная статья будет полезной. Жду предложения и замечяния, если таковые имеются =). Конец |
28.03.2009, 09:51 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
adic3x
offline
Опыт:
108,439Активность: |
1 вопрос автору - как он думает что будет если хендл обьекта превысит 0x00102000? 2 вопрос автору - как он думает что будет если хендл юнита на которого он аттачит значение будет "очищен" движком и в последствии присвоен другому юниту? |
28.03.2009, 11:38 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ELDAR
НИИ 4А-ВО кафедра SPELLS
offline
Опыт:
8,394Активность: |
|
28.03.2009, 11:52 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Van Damm
wait... what?
offline
Опыт:
22,268Активность: |
Способ - не абсолютно fault-safe. Будет вылет если индекс выйдет за границу массива в 8192 элемента.
плюс Цитата:
ну и плюс ко всему, это давно не ново: http://xgm.guru/forum/showpost.php?p=463224&postcount=7 и почитай вот эту тему, там много интересного на этот счет: http://xgm.guru/forum/showthread.php?p=463204 |
|
28.03.2009, 11:52 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ELDAR
НИИ 4А-ВО кафедра SPELLS
offline
Опыт:
8,394Активность: |
Van Damm хм , я и не писал что он нов, я писал ,что о нем нет статей и что о нем мало кто знает. Я думаю если грамотно удалять хэндлы то значение в 8192 не будет превышено
ELDAR добавил: Цитата:
|
|
28.03.2009, 11:58 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
agentex
offline
Опыт:
34,834Активность: |
ELDAR это все давно и ежу понятно. Токо одно но - оффсет надо брать не 0x100000, а хендл обьекта созданного сразу после инициализации (когда все статичные обьекты созданы тригерры и др). Границы массива преодлеть довольно трудно, если конешно код не кишит утечками.
|
28.03.2009, 12:01 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
J
expert
offline
Опыт:
48,447Активность: |
статью фтопку, идеия не нова, ей уже 3 года если не больше, всегда был против способа кастрирования хендла для атача чегонибудь на обекты
J добавил: agentex нет, кокраз таки лучше начинать именно с этой цыйры, потомучто вместе с тригерами создаются и юниты и пр. и если они убиваются например, то их хендлы освобождаются и если мы приатачим на них ченибудь то они будут в отрицательном индесе масива, тем самым и так шаткая система становится еще более шаткой |
28.03.2009, 12:21 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ELDAR
НИИ 4А-ВО кафедра SPELLS
offline
Опыт:
8,394Активность: |
Хм, интерестно найдется ли кто нить, кто за этот метод |
28.03.2009, 12:21 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
J
expert
offline
Опыт:
48,447Активность: |
ELDAR, ShadoW DaemoN вроде его юзает, больше никого незнаю
|
28.03.2009, 12:22 | #9
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
adic3x
offline
Опыт:
108,439Активность: |
свдн - хз
я не говорю что этот метод плохой/хороший. я говорю что всему свое место |
28.03.2009, 12:28 | #10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ELDAR
НИИ 4А-ВО кафедра SPELLS
offline
Опыт:
8,394Активность: |
Я вот что понял, этот метод может быть годен для карт не особо здаровых, на которых менее 7000 обьектов(таких карт большенство), и если автор емеет прямые руки.
ELDAR добавил: И вообще, этот метод хорошая замена SCV , не менее но более |
28.03.2009, 12:33 | #11
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
adic3x
offline
Опыт:
108,439Активность: |
Цитата:
к сожалению вся индустрия сейчас и пытается делать продукты, которые можно было бы использовать без прямых рук |
|
28.03.2009, 12:37 | #12
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Toadcop
offline
Опыт:
54,313Активность: |
Цитата:
Цитата:
|
||
28.03.2009, 14:19 | #13
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ELDAR
НИИ 4А-ВО кафедра SPELLS
offline
Опыт:
8,394Активность: |
Цитата:
|
|
28.03.2009, 15:11 | #14
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Toadcop
offline
Опыт:
54,313Активность: |
ELDAR толку то нету ка. ну очевидно я не использую -0x100000 для получения хеша... а минимальный хендл из массива.
|
28.03.2009, 16:13 | #15
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ELDAR
НИИ 4А-ВО кафедра SPELLS
offline
Опыт:
8,394Активность: |
Цитата:
|
|
28.03.2009, 17:49 | #16
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
MF
Что-то вокруг не так
offline
Опыт:
26,594Активность: |
ELDAR, в плане атача к таймерам... ИМХО лучше все вешать перебор массива на 1 таймер, чем все элементы на отдельные таймеры.
MF_Andreich добавил: ну и SCV давно прогнан (умные люди им и не пользовались, так как все решаетс грамотно организоваными массивами, а после изобретения структур все стало еще проще) |
28.03.2009, 18:02 | #17
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
PlayerDark
Coraline
offline
Опыт:
10,569Активность: |
А собственно какая разница между этой системой и кешем ? |
29.03.2009, 09:14 | #18
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ELDAR
НИИ 4А-ВО кафедра SPELLS
offline
Опыт:
8,394Активность: |
PlayerDark оч. большая, кешь сохраняет данные на компьютере хоста. Поэтому от него отказались Jass'еры , т.к. оч медленно.
|
29.03.2009, 10:12 | #19
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
adic3x
offline
Опыт:
108,439Активность: |
Цитата:
лол? фраза сия бред ADOLF добавил: // едем в жасс раздел |
|
29.03.2009, 10:28 | #20
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|