XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Закрытая тема
 
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
Проблема с триггерами
Делаю поиск объекта в массиве по запущенному триггеру, который запускается с помощью TriggerExecute.
В поиске сравниваю с GetTriggeringTrigger. И получается так, что поиск не происходит, из-за того что триггеры не совпадают. Примерный код
((код
struct Executer
static Executer array all
static integer count = 0
trigger action = null
<...>
static method GetTriggeringExec takes nothing returns Executer
local integer i = .count - 1
local trigger trg = GetTriggeringTrigger()
loop
exitwhen i < 0
if .all[i].action == trg then
set trg = null
return .all[i]
endif
set i = i - 1
endloop
set trg = null
return 0
endmethod
method Run takes nothing returns nothing
call TriggerExecute(.action)
endmethod
endstruct
))
В итоге он не находит вызванный объект. При проверке дебагом переменные trg и action небыли рывны null. В общем не знаю в чем проблема. Подскажите
Старый 26.01.2012, 12:33
alpha

offline
Опыт: 7,387
Активность:
зачем делать перебор, если можно все решить подгрузкой значений из хэш-таблицы по ключу хэндла триггера который запущен?
К примеру
  //получение желаемого, можно сократить дэфайном для прямого получения
    function GetTriggeringExec takes nothing returns integer
       return .all[LoadInteger(hashtable, GetHandleId(GetTriggeringTrigger()), 0)].action
    endfunction
    
  //присвоение
   nothing Init(){
      //создание триггера
      SaveInteger(hashtable, GetHandleId( (созданный триггер) ), 0, число)
   }
Даже в случае если целочисленная не записана крита не выйдет.
Старый 26.01.2012, 13:25
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
alpha, у меня религия не позволяет использовать хеш. Он работает жутко долго по сравнению с перебором 5-10 элементов
alexprey добавил:
alpha, и опять же по неведомой причине созданный триггер не равен GetTriggeringTrigger
Старый 26.01.2012, 13:57
spellwerk

offline
Опыт: 4,869
Активность:
покажи код, где используется GetTriggeringExec
Старый 26.01.2012, 15:14
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
((код
function MyAction takes nothing returns nothing
local Executer exec = Executer.GetTriggeringExec()
call BJDebug("exec = "+I2S(exec))
endfunction
))
Старый 26.01.2012, 15:44
Master_chan
Полуночный командир
offline
Опыт: 15,660
Активность:
Попробуй реализовать без структур, возможно у тебя GetTriggeringTrigger() при компиляции уезжает в другую функцию, либо просто не работает при вызове через TriggerExecute, хотя это вряд ли.
Старый 26.01.2012, 15:58
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
Master_chan, с регионами нормально пашет. Хотя возможно. В принципе я уже решил эту проблему, немного исправив алгоритм.
Старый 26.01.2012, 16:03
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
alexprey, сча немного скопетаню, но структура == триггер, при создании структуры создается новый триггер, ну соответственно по этому:
alexprey:
созданный триггер не равен GetTriggeringTrigger
Бтв, вообще рекомендую юзать только статичные структуры.
И добавь проверку перед экзекутом на !=null, для надежности=)
Старый 26.01.2012, 16:23
alpha

offline
Опыт: 7,387
Активность:
alexprey:
alpha, у меня религия не позволяет использовать хеш. Он работает жутко долго по сравнению с перебором 5-10 элементов
У тебя помимо перебора еще несколько операций, в конечном счете хэш будет оптимальнее двух переборов с инициализацией да и проще для читабильности, думаю.
Старый 26.01.2012, 16:48
J64_

offline
Опыт: 4,724
Активность:
без перебора и без хеша
Executer.All[GetHandleId(GetTriggeringTrigger())-FIRST_TRIGGER_HANDLE_OFFSET]
Старый 26.01.2012, 17:46
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
Faion:
И добавь проверку перед экзекутом на !=null, для надежности=)
alexprey:
При проверке дебагом переменные trg и action небыли рывны null
Уже решил проблему без привязки к версии.
Старый 29.01.2012, 20:55
Закрытая тема

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 14:44.