Doc
offline
Опыт:
63,163Активность: |
Zanozus, лицоладонь. И зачем? |
30.01.2011, 16:54 | #41
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Zanozus
Уехал учиться
offline
Опыт:
8,512Активность: |
а вот зачем этот массив интеджеров в него сохраняются структуры, чтобы потом пройтись по массиву циклом и выполнять действия с этими структурами. так ? |
30.01.2011, 17:11 | #42
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
spellwerk
offline
Опыт:
4,869Активность: |
посмотри как реализованы вообще структуры, и не будет таких вопросов |
30.01.2011, 17:14 | #43
+1/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Zanozus
Уехал учиться
offline
Опыт:
8,512Активность: |
прочитал. Щас на практике проверю мою версию и отпишусь. |
30.01.2011, 17:18 | #44
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
reALien
offline
Опыт:
29,211Активность: |
до компиляции:
после:
делаем выводы =О |
30.01.2011, 17:20 | #45
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Zanozus
Уехал учиться
offline
Опыт:
8,512Активность: |
так, ладно, понял наконец-то что вы мне пытались объяснить. Это немного не то.
Вы храните номера структур в массиве интеджеров, а при перемещении юнитов перебираете этот массив и присваиваете local point p = array[i] и получаем p.x, p.y для каждого юнита. а что если юнит умер ? как полностью удалить его из цикла и структуру в которой он находился ? а также номер структуры из массива. и попутный вопрос: на много ли быстрее цикл чем ForGroup() ? И если цикл будет "пропускать" свободные индексы массива интеджеров всеравно быстрее ? Отредактировано Zanozus, 30.01.2011 в 17:37. |
30.01.2011, 17:29 | #46
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Nekit1234007
offline
Опыт:
11,916Активность: |
((код
globals
hashtable hash = InitHashtable() endglobals struct struct0001
structdata endstruct function onUnitDie takes nothing returns nothing
local struct0001 s = LoadInteger(hash, GetHandleId(GetDyingUnit()), 0) call s.destroy() endfunction function func0001 takes nothing returns nothing local struct0001 s = struct0001.create() local unit u = CreateUnit(...) call SaveInteger(hash, GetHandleId(u), 0, s) set u = null endfunction )) |
30.01.2011, 17:50 | #47
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Zanozus
Уехал учиться
offline
Опыт:
8,512Активность: |
Nekit1234007, во я к этому все и клоню. Зачем тогда сохранять юнита в структуре, потом сохранять номер структуры в массив интеджеров и перебором этого массива двигать юнита. Если можно сразу сохранить структуру в хеш под индексом юнита и добавить юнита в группу. Потом в ForGroup() загружать обратно эту структуру и двигать юнита. И при смерти юнита также загрузить его структуру и удалить. Или ForGroup() настолько медленнее цикла что стоит всего этого гемороя ? |
30.01.2011, 18:00 | #48
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
spellwerk
offline
Опыт:
4,869Активность: |
Вариант раз:
Вариант два:
в первом варианте вызывается функция a, затем с помощью функции ForGroup мы к каждому по сути вызываем функцию f, а там еще дополнительно LoadInteger, и делаем действия со структурой.
во втором варианте мы вызываем функцию f, проходим по всем элементам в массиве структур, делаем с каждой действия. может быть, не очень точно описал, но примерно это будет так. так что решай, как тебе лучше. Spy_ добавил: и кстати какой геморой? создать массив интегеров и один интегер, или создать хэштаблицу и каждый раз делать Save/LoadInteger. аттач тоже не бесполезен, но в данном случае, если ты делаешь действия со всеми структурами, то лучше это делать через массив. |
30.01.2011, 19:06 | #49
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Zanozus
Уехал учиться
offline
Опыт:
8,512Активность: |
Spy_, как ты тогда собираешься удалить сохраненную структуру из массива и что потом делать с "дыркой" в массиве после удаления ? |
30.01.2011, 19:36 | #50
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Doc
offline
Опыт:
63,163Активность: |
Zanozus, удалить также как и обычно -.- заменить последним элементом в массиве.
|
30.01.2011, 20:48 | #51
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
exploder
iOS zealot
offline
Опыт:
19,394Активность: |
Zanozus, мы тебе пытались объяснить и выпытать у тебя зачем тебе нужен аттач к юниту. Например, в системе дамми-снарядов, смертью юнита ты управляешь программно и там, как мне кажется, структуры хранить было бы удобнее. Структуры всех активных в данный момент снарядов в одном массиве, который обрабатывается одним глобальным таймером например.
В твоем случает, ты должен учитывать собития, которые генерирует движок, то есть юнит может умереть и так далее, то есть в твоем случае действительно уместнее использовать аттач и хранение ссылок на структуры через хэш.
Мораль басни, если ты всегда будешь искать решения через аттач, ты можешь упустить более эффективные решения проблемы. |
30.01.2011, 23:52 | #52
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Zanozus
Уехал учиться
offline
Опыт:
8,512Активность: |
exploder, думаете я просто так вас всех тут допрашиваю ?=) я как раз таки пытаюсь обойти хеш-таблицу и группы, попутно взвешивая все "за" и "против", подготавливаю почву для одной тяжеловесной задумки. |
31.01.2011, 11:44 | #53
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Faion
Noblesse Oblige
offline
Опыт:
30,395Активность: |
Zanozus, ты собираешься атачить статичные значения юнитам ? Если да и они типизируются, создай что то типо БД на каждый тип юнита, на юнита прикрепи тригер хендл, и когда тебе нужно будет получить эти данные просто вызови его триггер.
И это будет быстрее чем если ты для каждого юнита сделаешь структуру, т.к. будет дублирование одинаковых параметров десятки(мб сотни) раз, чем больше данных тем сильнее будет снижатся быстродействие, да и хранить большое кол-во данных не тру, тем более данных если много и обращение к ним частое, то хорошо бы разбить их на группы данных которые тебе могут понадобится. Я к примеру сделал такое для квест системы, т.к. для структур на мой взгляд перебор, т.к. на каждого юнита была бы структура с ~50 значениями, а юнитов предполагается более сотни юзать, однако данные статичные + разбил на группы данных, и теперь могу при необходимости вызвать часть из нужных данных. Но такая фича только для статичного типа данных, с динамичными онли структуры\хт\массивы и тд. |
31.01.2011, 12:38 | #54
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Zanozus
Уехал учиться
offline
Опыт:
8,512Активность: |
Faion, нет не статичные.
Думаю это последний вопрос:
будут ли вычисления в методе зависеть от текущих координат юнита ? имеет ли смысл так писать ?
или нужно так:
Отредактировано Zanozus, 31.01.2011 в 13:30. |
31.01.2011, 13:22 | #55
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
spellwerk
offline
Опыт:
4,869Активность: |
нет, не будут. нужен второй вариант |
31.01.2011, 14:58 | #56
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Zanozus
Уехал учиться
offline
Опыт:
8,512Активность: |
ВСЁ ! Всем большое спасибо ! Если тема больше никому не нужна - закрывайте ! (примерно через недельку допишу спелл, вернее систему) |
31.01.2011, 15:07 | #57
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|