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

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

Закрытая тема
 
Sidhe
Unity3D engine
offline
Опыт: 7,721
Активность:
Юнит выбран - проверка
каким образом можно проверить, что юнит уже выбран в данный мнмент?

пример:
стоят 2 юнита, я хочу выбрать одного из них. Когда я щелкаю на первом юните, то мне нужно нажать на него еще раз, чтобы к примеру на экран вывелось сообщение "выбран" (не суть). А если я щелкаю на 2ом юните, то нужно и его 2 раза щелкнуть для вывода текста на экран.

вообщем суть как в Винде, нада 2 раза щелкнуть по любому обьекту, чтобы его открыть

З.Ы. самое главное чтобы это было МУИ, тоесть для каждого игрока индивидуально
З.Ы.Ы. пробовал разными способами, но что то не особо получается
Старый 25.02.2012, 16:28
alpha

offline
Опыт: 7,387
Активность:
native GroupEnumUnitsSelected takes group whichGroup, player whichPlayer, boolexpr filter returns nothing
проверь, да
alpha добавил:
Перед применением, наверное, лучше сделать это действие:
((код jass
call SyncSelections()
))
Старый 25.02.2012, 16:38
Sidhe
Unity3D engine
offline
Опыт: 7,721
Активность:
это то понятно, но в чем тогда разница между:
Код:
constant native IsUnitSelected takes unit whichUnit, player whichPlayer returns boolean
Старый 25.02.2012, 16:50
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
alpha, вроде как GroupEnumUnitsSelected это функция которая в ForGroup'е прогоняет каждого юнита на IsUnitSelected
Sidhe, ну можно попробовать сделать так:
На каждого юнита нужно иметь его предыдущее состояние (выбран или нет) поэтому надо юзать либо кастом валуй либо Хеш таблицу. В принципе тут дело вкуса. При выборе юнита проверяешь его предыдущее состояние. Если был выбран, то значит это второй клик, если нет, значит первый. Дальше сохраняем наше состояние. Ну это как первый вариант.
alexprey добавил:
Еще как вариант:
Тут потребуется уже побольше переменных. На этот раз в хеш-таблицу будем писать кол-во кликов. Юнит выбран -> увеличиваем наш ссчетчик. И делаем нужную проверку. Следующий этап это таймер. Выставляем ему время около 0.8 - 1.0 сек. В этом таймере сбрасываем наш счетчик на 0.
Старый 25.02.2012, 17:01
Sidhe
Unity3D engine
offline
Опыт: 7,721
Активность:
alexprey, кастом валуй не катит, т.к. МУИ отпадает сразу

мне бы пример хотябы бональный (в вкиде кода). я проверял через int начислением i++, но не выходит корректно

alexprey, таймером не пойдет, потмучто второй клик по юниту можно делать в любое время
Старый 25.02.2012, 17:03
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
Sidhe:
alexprey, кастом валуй не катит, т.к. МУИ отпадает сразу
эмммм почему??? ну тогда в хеш, хотя не люблю его, но придется раз CV ни как
Sidhe:
alexprey, таймером не пойдет, потмучто второй клик по юниту можно делать в любое время
Ну ты просил как в винде я и предложил второй вариант. Тогда 1 вариант. Выбрал, проверил прудыдущее состояние
Старый 25.02.2012, 17:21
Klop
Папа римский
offline
Опыт: 13,006
Активность:
Sidhe, если я правильно понял то тебе надо событие
Event_player_unit_selected - вроде так
там игрок задаётся
работаем с этим событием отлавливает выбор юнита
переменная и пара проверок и всё
Klop добавил:
а вот тебе алгоритм
unit = null
bool = false

funtion Action takes nothing returns nothing
   if GetTriggerUnit() == unit and bool then
       ... // Дейсвия
   else
       unit = GetTriggerUnit()
       bool = true
   endif 
endfunction
Старый 25.02.2012, 17:29
Sidhe
Unity3D engine
offline
Опыт: 7,721
Активность:
Klop, ту нативку которую я сюда вставил, она тоже отслеживает игрока

суть то как раз таки в проверках, пока плохо выходит. как вариант использоваться int но пока не представляю как зделать так, чтобы корректно определяло уже выбранного юнита...на словах то все просто =)

Sidhe добавил:
Klop, спасибо, впринципе заработаело
Старый 25.02.2012, 17:51
Klop
Папа римский
offline
Опыт: 13,006
Активность:
Sidhe, всё что тебе осталось просто достроен проверки на выбраного и сделай массивы для муи или используй хеш)
я так делал выбор героев двойным кликом
Старый 25.02.2012, 17:55
Sidhe
Unity3D engine
offline
Опыт: 7,721
Активность:
Klop, через структуры мне проще, хеш я не юзаю)

да впринципе то что ты дал условия, их достаточно
Старый 25.02.2012, 18:00
Klop
Папа римский
offline
Опыт: 13,006
Активность:
Sidhe, Для Муи нет,пригодится ещё один бул что бы повторно не брать)
и отключить вообще триггер или удалить
например
у тебя один игрок выбрал а другой нет,триггер отключать и удалять нельзя)
отметил ему бул что у него уже есть
когда у всех отметиш тогда удалить
или я что то уже лишнее несу)
Старый 25.02.2012, 18:40
Sidhe
Unity3D engine
offline
Опыт: 7,721
Активность:
Klop, в твоем коде небольшой недостаток - если ткнешь на ю1, потом ю2 и снова на ю1, условие сработает, хотя не должно
Старый 25.02.2012, 19:13
Klop
Папа римский
offline
Опыт: 13,006
Активность:
Sidhe, нет,как если триггеринг юнит будет
Ю1 потом Ю2 unit будет Ю2 и если на Ю1 то юнит должен стать Ю1 а не сработать
Старый 25.02.2012, 19:27
Sidhe
Unity3D engine
offline
Опыт: 7,721
Активность:
Klop, если черехз Хеш, то именно так и работает, как я описал
Код:
function EventPick_Actions takes nothing returns nothing
    local integer Pick_Handle = GetHandleId(GetTriggerUnit())
    local unit u = LoadUnitHandle(udg_HASH, Pick_Handle, 1)
    local boolean b = LoadBoolean(udg_HASH, Pick_Handle, 0)
    
    if b == true and GetTriggerUnit() == u
BJDebugMsg("готово")       
        call RemoveSavedHandle(udg_HASH, Pick_Handle, 0)
        call RemoveSavedHandle(udg_HASH, Pick_Handle, 1)
    else
BJDebugMsg("выбрал")
        set u = GetTriggerUnit()
        set b = true
        
        call SaveBoolean(udg_HASH, Pick_Handle, 0, b)
        call SaveUnitHandle(udg_HASH, Pick_Handle, 1, u)
    endif
    
    set u = null
endfunction
Старый 25.02.2012, 19:39
Klop
Папа римский
offline
Опыт: 13,006
Активность:
Sidhe, вообщем разберайся сам я намёк дал я так делал давно всё работало
Старый 25.02.2012, 19:43
Sidhe
Unity3D engine
offline
Опыт: 7,721
Активность:
можно закрыть, всем спасибо
Старый 27.02.2012, 01:57
alpha

offline
Опыт: 7,387
Активность:
закрыто
Старый 27.02.2012, 05:01
Закрытая тема

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

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

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

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



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