Проблема с окнами таймера
|
|
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
Блокировки:
| йаснаа я тут лишний
|
|
|
|