![]()
ELDAR
НИИ 4А-ВО кафедра SPELLS
![]() ![]() offline
Опыт:
8,394Активность: |
Ассоциативные массивы или прогоним SCV
ВступлениеИтак , с чего же начинают все ? А вот, статью написать меня подвигло то, что столь практичный метод знает столь малое кол-во народу ( кстати сам недавно о нем узнал ). Статья предназначена для Jass’еров от мала до велика, и если вы не знаете Jass то это статья не представит для вас никакой ценности. Вперёд с песней.Этот метод чем то похож на SCV( System Custom Value ), а именно тем, что к хэндлу привязываются обьекты. Итак нам понадобится функция H2I : Код:
Теперь качаем карту приложенную к статье. Итак ознакомимся с текстом 1-ого триггера Код:
Здесь мы видим привязку глобалки String к только что созданному таймеру. ( не бойтесь 0х100000 – это число в 16-ично системе счисления, без него будет 10-и значное число) Далее : Код:
Здесь мы видим, что создается триггер и на экран выводится его номер, причем эти номера последовательные. Следовательно при привязки глобальных переменных к хэндлу, никогда не будет совпадений в номерах. Теперь отключим первый триггер и включим второй. Собственно они отличаются только лишь одной строкой Код:
в ней уничтожается триггер. И что же мы видим, номера триггеров не меняются. Из этого можно сделать вывод, что при своевременном удалении хэндлов не возникнет ошибок с величиной массивов. Практическое применение :Вобщем данный метод имеет очень большое практическое значение. Я вам покажу этот метод в действии на примере движения снарядов. Пришло время включить последний триггер. Создаем снаряд и записываем его в переменную: Код:
Тут же забиваем в переменную дальность полета снаряда: Код:
И собсвенно запускаем таймер. Теперь расммотрим функцию Move: Код:
Изменяем координаты юнита забитого в переменную Unit с уникальным номером нашего таймера. Далее уменьшаем переменную Real: Код:
Вот собсвенно и всё , я надеюсь что данная статья будет полезной. Жду предложения и замечяния, если таковые имеются =). Конец |
![]() |
#1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
adic3x
![]() offline
Опыт:
108,439Активность: |
1 вопрос автору - как он думает что будет если хендл обьекта превысит 0x00102000? 2 вопрос автору - как он думает что будет если хендл юнита на которого он аттачит значение будет "очищен" движком и в последствии присвоен другому юниту? |
![]() |
#2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
ELDAR
НИИ 4А-ВО кафедра SPELLS
![]() ![]() offline
Опыт:
8,394Активность: |
|
![]() |
#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 |
|
![]() |
#4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
ELDAR
НИИ 4А-ВО кафедра SPELLS
![]() ![]() offline
Опыт:
8,394Активность: |
Van Damm хм , я и не писал что он нов, я писал ,что о нем нет статей и что о нем мало кто знает. Я думаю если грамотно удалять хэндлы то значение в 8192 не будет превышено
ELDAR добавил: Цитата:
|
|
![]() |
#5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
agentex
![]() offline
Опыт:
34,834Активность: |
ELDAR это все давно и ежу понятно. Токо одно но - оффсет надо брать не 0x100000, а хендл обьекта созданного сразу после инициализации (когда все статичные обьекты созданы тригерры и др). Границы массива преодлеть довольно трудно, если конешно код не кишит утечками.
|
![]() |
#6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
J
expert
![]() offline
Опыт:
48,447Активность: |
статью фтопку, идеия не нова, ей уже 3 года если не больше, всегда был против способа кастрирования хендла для атача чегонибудь на обекты
J добавил: agentex нет, кокраз таки лучше начинать именно с этой цыйры, потомучто вместе с тригерами создаются и юниты и пр. и если они убиваются например, то их хендлы освобождаются и если мы приатачим на них ченибудь то они будут в отрицательном индесе масива, тем самым и так шаткая система становится еще более шаткой |
![]() |
#7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
ELDAR
НИИ 4А-ВО кафедра SPELLS
![]() ![]() offline
Опыт:
8,394Активность: |
Хм, интерестно найдется ли кто нить, кто за этот метод |
![]() |
#8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
J
expert
![]() offline
Опыт:
48,447Активность: |
ELDAR, ShadoW DaemoN вроде его юзает, больше никого незнаю
|
![]() |
#9
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
adic3x
![]() offline
Опыт:
108,439Активность: |
свдн - хз
я не говорю что этот метод плохой/хороший. я говорю что всему свое место |
![]() |
#10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
ELDAR
НИИ 4А-ВО кафедра SPELLS
![]() ![]() offline
Опыт:
8,394Активность: |
Я вот что понял, этот метод может быть годен для карт не особо здаровых, на которых менее 7000 обьектов(таких карт большенство), и если автор емеет прямые руки.
ELDAR добавил: И вообще, этот метод хорошая замена SCV , не менее но более |
![]() |
#11
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
adic3x
![]() offline
Опыт:
108,439Активность: |
Цитата:
к сожалению вся индустрия сейчас и пытается делать продукты, которые можно было бы использовать без прямых рук |
|
![]() |
#12
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
Toadcop
![]() ![]() offline
Опыт:
54,313Активность: |
Цитата:
Цитата:
|
||
![]() |
#13
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
ELDAR
НИИ 4А-ВО кафедра SPELLS
![]() ![]() offline
Опыт:
8,394Активность: |
Цитата:
|
|
![]() |
#14
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
Toadcop
![]() ![]() offline
Опыт:
54,313Активность: |
ELDAR толку то нету ка. ну очевидно я не использую -0x100000 для получения хеша... а минимальный хендл из массива.
|
![]() |
#15
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
ELDAR
НИИ 4А-ВО кафедра SPELLS
![]() ![]() offline
Опыт:
8,394Активность: |
Цитата:
|
|
![]() |
#16
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
MF
Что-то вокруг не так
![]() ![]() offline
Опыт:
26,594Активность: |
ELDAR, в плане атача к таймерам... ИМХО лучше все вешать перебор массива на 1 таймер, чем все элементы на отдельные таймеры.
MF_Andreich добавил: ну и SCV давно прогнан (умные люди им и не пользовались, так как все решаетс грамотно организоваными массивами, а после изобретения структур все стало еще проще) |
![]() |
#17
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
PlayerDark
Coraline
![]() ![]() offline
Опыт:
10,569Активность: |
А собственно какая разница между этой системой и кешем ? |
![]() |
#18
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
ELDAR
НИИ 4А-ВО кафедра SPELLS
![]() ![]() offline
Опыт:
8,394Активность: |
PlayerDark оч. большая, кешь сохраняет данные на компьютере хоста. Поэтому от него отказались Jass'еры , т.к. оч медленно.
|
![]() |
#19
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
adic3x
![]() offline
Опыт:
108,439Активность: |
Цитата:
лол? фраза сия бред ADOLF добавил: // едем в жасс раздел |
|
![]() |
#20
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|