Сейчас 07:16:44 Пятница, 29 ноября, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Проблема с окнами таймера
molgreenДата: Вторник, 10 Июня 2014, 01:11:08 | Сообщение # 1
5 уровень
Группа: Проверенные
Сообщений: 142
Награды: 0
Репутация: 37
Блокировки:
Доброго времени суток, уважаемые картостроители. У меня накипел тут вопросик, по поводу окон таймера. У меня есть один триггер на смерть героев, которые отвечают за окна таймера и возрождения геров. Так вот, после смерти героя создаётся окно таймера, но если сдохло несколько героев, то создаются несколько окон, которые не убираются. Окна показывают 00:00:00. Как их убирать? Создавать 12 триггеров для каждого игрока?

le

 

BiboДата: Вторник, 10 Июня 2014, 09:00:22 | Сообщение # 2
Группа: Проверенные
Сообщений: 741
Награды: 0
Блокировки:
Нет, зачем же. Просто скрываем соответствующее окно таймера, для всех игроков, кроме владельца умершего героя.
Здесь подписал функцию скрытия окна таймера.

А вообще, таймер воскрешение лучше делать через лидербоард(то бишь, как в доте). Его окошко, в отличие от таймеров, будет располагаться ниже мультибоарда.


Сообщение отредактировал Bibo - Вторник, 10 Июня 2014, 09:02:59
 

molgreenДата: Вторник, 10 Июня 2014, 10:59:49 | Сообщение # 3
5 уровень
Группа: Проверенные
Сообщений: 142
Награды: 0
Репутация: 37
Блокировки:
Цитата Bibo ()
А вообще, таймер воскрешение лучше делать через лидербоард(то бишь, как в доте). Его окошко, в отличие от таймеров, будет располагаться ниже мультибоарда


Во-первых, я так и не разобрался в МБ (наработки либо на джасс, либо они до ужаса баганые)
Во-вторых, окно будет показывать только дохлому игроку(ну а хотя это можно считать плюсом)

Цитата Bibo ()
Здесь подписал функцию скрытия окна таймера.


Это не совсем то, что мне нужно :(


le

 

BiboДата: Вторник, 10 Июня 2014, 11:12:48 | Сообщение # 4
Группа: Проверенные
Сообщений: 741
Награды: 0
Блокировки:
Цитата molgreen ()
Это не совсем то, что мне нужно

Ну так тебе же нужно скрыть окно таймера воскресшего героя?
Создаешь таймеры для каждого игрока и окна таймеров для каждого таймера, заносишь их в переменную.
Герой умер - запускаешь соответствующий таймер, показываешь окно таймера.
Герой воскрес - паузишь таймер, скрываешь окно.
 

molgreenДата: Вторник, 10 Июня 2014, 11:18:42 | Сообщение # 5
5 уровень
Группа: Проверенные
Сообщений: 142
Награды: 0
Репутация: 37
Блокировки:
Я понял, что окна нужно заносить в переменную, но каким образом их потом скрывать????

Пссс... хорошего мультиборда на гуи не найдётся?


le



Сообщение отредактировал molgreen - Вторник, 10 Июня 2014, 11:23:28
 

BiboДата: Вторник, 10 Июня 2014, 11:26:55 | Сообщение # 6
Группа: Проверенные
Сообщений: 741
Награды: 0
Блокировки:
Цитата molgreen ()
но каким образом их потом скрывать????


Или я опять чего-то не понимаю.
 

molgreenДата: Вторник, 10 Июня 2014, 15:04:13 | Сообщение # 7
5 уровень
Группа: Проверенные
Сообщений: 142
Награды: 0
Репутация: 37
Блокировки:
Я попробывал, но окна всё равно иногда не пропадают

Добавлено (10 Июня 2014, 15:02:35)
---------------------------------------------
Ща скрин залью

Добавлено (10 Июня 2014, 15:04:13)
---------------------------------------------



le

 

BiboДата: Вторник, 10 Июня 2014, 16:23:50 | Сообщение # 8
Группа: Проверенные
Сообщений: 741
Награды: 0
Блокировки:
Никогда не используй вейты (действие - ждать).
Тем более, ты уже запустил таймер, по его окончанию можно воскресить героя и обойтись без вейта(время истечение которого может не совпасть со временем истечения таймера).
Так же, вместо того чтобы каждый раз создавать новое окно таймера, создай их необходимое кол-во(на каждого играющего игрока) при инициализации карты и просто показывай/скрывай в момент смерти/воскрешение героя.


Сообщение отредактировал Bibo - Вторник, 10 Июня 2014, 16:25:06
 

OverkillsДата: Вторник, 10 Июня 2014, 16:26:42 | Сообщение # 9
Группа: Проверенные
Сообщений: 1785
Награды: 0
Репутация: 880
Блокировки:
Почитай, что такое хэш-таблица. Очень помогает в таких ситуациях.

 

molgreenДата: Вторник, 10 Июня 2014, 16:26:52 | Сообщение # 10
5 уровень
Группа: Проверенные
Сообщений: 142
Награды: 0
Репутация: 37
Блокировки:
Bibo, хорошо. Только каким образом это всё реализовать? В моей карте 12 игроков.

le

 

BiboДата: Вторник, 10 Июня 2014, 16:47:16 | Сообщение # 11
Группа: Проверенные
Сообщений: 741
Награды: 0
Блокировки:
Цитата Overkills ()
Почитай, что такое хэш-таблица. Очень помогает в таких ситуациях.

Действительно, очень помогает. На GUI с ними не очень удобно, но к товарищу следует прислушаться.
Цитата molgreen ()
каким образом это всё реализовать?

Создаешь переменную-массив таймеров. Создаем триггер без события. В триггере инициализации карты, добавляем созданному триггеру событие Время - Timer Expires(не знаю как он переведен у тебя) по каждому созданному таймеру.
Создаешь переменную-массив окон таймеров. Создаешь для каждого таймера свое окно и заносишь в массив под тем же номером что и соответствующий ему таймер.
Создаешь переменную-массив героев(если таковой еще нету). Номером героя в массиве служит номер игрока-владельца героя.

Первый триггер
Событие: Юнит умирает.
Условие: Умирающий юнит == Герой
Действие:
Запускаем таймер, номер которого в массиве соответствует номеру игрока-владельца умершего юнита.
Показываем окно таймера, номер которого в массиве соответствует номеру запущеного таймера.

Второй триггер (тот, которому добавляли событие из триггера инициализации карты)
Действия:
Делаем цикл от 1 до 12 в тело которого добавляем условие: Если истекший таймер == Таймер в массиве под номером текущей итерации: скрываем окно таймера, которое под тем же номером в массиве, воскрешаем героя, что под тем же номером в массиве.

Как объяснить проще, не знаю.


Сообщение отредактировал Bibo - Вторник, 10 Июня 2014, 16:51:47
 

molgreenДата: Вторник, 10 Июня 2014, 21:24:06 | Сообщение # 12
5 уровень
Группа: Проверенные
Сообщений: 142
Награды: 0
Репутация: 37
Блокировки:
Ладно короче. Лучше не буду пока-что трогать эти окна)

Добавлено (10 Июня 2014, 21:24:06)
---------------------------------------------

Цитата Bibo ()
добавляем созданному триггеру событие Время - Timer Expires(не знаю как он переведен у тебя) по каждому созданному таймеру


1. Зачем добавлять условие через триггер, а не сразу его кинуть?
2. Что значит "По каждому созданному таймеру"?


le

 

OverkillsДата: Вторник, 10 Июня 2014, 21:55:45 | Сообщение # 13
Группа: Проверенные
Сообщений: 1785
Награды: 0
Репутация: 880
Блокировки:
Проходишься по массиву и создаешь столько, сколько нужно.

 

BiboДата: Вторник, 10 Июня 2014, 22:25:04 | Сообщение # 14
Группа: Проверенные
Сообщений: 741
Награды: 0
Блокировки:
Цитата molgreen ()
. Зачем добавлять условие через триггер, а не сразу его кинуть?

Не условие, а событие.
Можешь добавить вручную, на каждого из 12 игроков. И каждому таймеру вручную добавить окно. После чего получим не меньше 24 строк действий в триггере.
А можешь пройти по массиву таймеров и окон таймеров циклом, автоматизировав этот процесс.


Добавлено (10 Июня 2014, 22:25:04)
---------------------------------------------
Из меня получился "центр вредных советов".
Вспомнил о существование некоего бага с окнами таймеров. Он заключается в некорректном их отображении(или вернее не отображении), в случае если их много, особенно если их постоянно скрывать и показывать. Посему лучше будет каждый раз создавать новое окно и уничтожать после воскрешения.
В общем, вот пример. Максимально упрощенный для гуишника, но с CS вставкой.


Сообщение отредактировал Bibo - Вторник, 10 Июня 2014, 22:27:45
 

molgreenДата: Среда, 11 Июня 2014, 19:39:51 | Сообщение # 15
5 уровень
Группа: Проверенные
Сообщений: 142
Награды: 0
Репутация: 37
Блокировки:
Bibo, спасибо. Только после импорта твоего "чуда", залагал редактор и вылетел, при этом выдав ошибку. Весь мой труд пропал... Даже карту не могу открыть, ибо пишет что сведения о войсках отсутствуют.



le

 

BiboДата: Среда, 11 Июня 2014, 22:37:56 | Сообщение # 16
Группа: Проверенные
Сообщений: 741
Награды: 0
Блокировки:


В моем примере нет ничего, что могло бы вызвать подобные последствия.
 

OverkillsДата: Четверг, 12 Июня 2014, 13:13:08 | Сообщение # 17
Группа: Проверенные
Сообщений: 1785
Награды: 0
Репутация: 880
Блокировки:
А ведь верно forLoopAIndex? Вроде GetForLoopIndexА, разве нет?



Сообщение отредактировал Overkills - Четверг, 12 Июня 2014, 13:40:52
 

BiboДата: Четверг, 12 Июня 2014, 13:33:33 | Сообщение # 18
Группа: Проверенные
Сообщений: 741
Награды: 0
Блокировки:
Цитата Overkills ()
А ведь верно forLoopAIndex? Вроде GetForLoopAIndex, разве нет?

 

OverkillsДата: Четверг, 12 Июня 2014, 13:40:58 | Сообщение # 19
Группа: Проверенные
Сообщений: 1785
Награды: 0
Репутация: 880
Блокировки:
йаснаа я тут лишний

 

  • Страница 1 из 1
  • 1
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz