|
|
|
|
как лучше создавать монстров на карте?
|
|
Denialsan | Дата: Понедельник, 22 Августа 2011, 22:50:05 | Сообщение # 1 |
10 уровень
Группа: Проверенные
Сообщений: 1225
Награды: 0
Репутация: 48
Блокировки:
| 1) создаю триггером, но после создания около 300 мобов, карта начинает лагать. Как удалять точку создания моба, если он создается в случайной точке региона? 2) создавать всех мобов за каждого игрока (ставить на карте, с WEU снимается ограничение на войска игроков) и после загрузки карты сделать их нейтрально-враждебными? 3) создавать сначало мобов малого уровня, а через некоторое время создавать мобов уже с большим уровнем и т.д.) опять вопрос про удаление точек. 4) ваш вариант.
|
|
|
|
lawson | Дата: Понедельник, 22 Августа 2011, 22:51:17 | Сообщение # 2 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (Denialsan) ваш вариант. Создавай таймером периодом каждого юнита в 0.3 секунды снимит нагрузку на проц.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Понедельник, 22 Августа 2011, 22:51:40 |
|
|
|
Denialsan | Дата: Понедельник, 22 Августа 2011, 22:52:46 | Сообщение # 3 |
10 уровень
Группа: Проверенные
Сообщений: 1225
Награды: 0
Репутация: 48
Блокировки:
| Quote (lawson) Создавай таймером периодом каждого юнита в 0.3 секунды снимит нагрузку на проц. точки, точки и еще раз точки...юнит создается в случайной точке региона!
|
|
|
|
lawson | Дата: Понедельник, 22 Августа 2011, 22:57:30 | Сообщение # 4 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (Denialsan) точки, точки и еще раз точки...юнит создается в случайной точке региона! Когда ты создаешь сразу 300 юнитов одним махом даже удаление точек не поможет. Я на своей карте при инициализации создаю всех нейтралов примерно 40 юнитов и даже у меня заметно в этот момент подлагивает карту на долю секунды.Добавлено (22 Август 2011, 22:57:30) --------------------------------------------- + конечно лучше создавать за нейтаральных игроков тоже снимит нагрузку.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
|
|
|
|
Denialsan | Дата: Понедельник, 22 Августа 2011, 23:01:05 | Сообщение # 5 |
10 уровень
Группа: Проверенные
Сообщений: 1225
Награды: 0
Репутация: 48
Блокировки:
| Quote (lawson) + конечно лучше создавать за нейтаральных игроков тоже снимит нагрузку. я создаю за нейтрально-враждебных, если бы дело было бы не в точках, то карта бы просто лагала несколько секунд после старта, а так остаются точки в которых созданы юниты, мне их нужно удалить! Я не думаю что если создавать юнитов за игроков то карта будет лагать, я просто думаю создать по ~100 мобов за каждого игрока, а потом их всех сделать нейтрально-враждебными, или тоже не катит?
|
|
|
|
lawson | Дата: Понедельник, 22 Августа 2011, 23:05:49 | Сообщение # 6 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (Denialsan) а потом их всех сделать нейтрально-враждебными, или тоже не катит? Хороший вариант. Когда ты создаешь юнита за игрока который находится на карте не считаю нейтралов, движок вара провдит много действий как для юнита так и для игрока, такие как привязка юнита к игроку, установка союзников и так далее, это занимает время, особенно это касается героев. Я тебе предложил чтоб без лагов через таймер, делай как считаешь нужным.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
|
|
|
|
Denialsan | Дата: Понедельник, 22 Августа 2011, 23:17:42 | Сообщение # 7 |
10 уровень
Группа: Проверенные
Сообщений: 1225
Награды: 0
Репутация: 48
Блокировки:
| Quote (lawson) занимает время, особенно это касается героев. Я тебе предложил чтоб без лагов через таймер, делай как считаешь нужным. создаю через таймер и разбиваю создание на несколько триггеров, у меня появилась идея, что если пикать юнитов одного типа и удалять точки их создания, покатит так? кстати как там call RemoveLocation(udg_name pos) так?
|
|
|
|
lawson | Дата: Понедельник, 22 Августа 2011, 23:30:04 | Сообщение # 8 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (Denialsan) у меня появилась идея, что если пикать юнитов одного типа и удалять точки их создания, покатит так? Хе тогда уже не важно будет удаление точек. Надо сразу при создании удалять а так ты еще процессор нагрузишь лишними действиями по пику и по удалению точек.
Quote (Denialsan) кстати как там call RemoveLocation(udg_name pos) так? Да так.
Добавлено (22 Август 2011, 23:22:21) --------------------------------------------- Я могу предложить тебе варинт создавать юнитов по координатам CreateUnit() без областей и без удаления точек. Но эта функция работает только для одного юнита поэтому придется делать это церез цикл или таймер.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Понедельник, 22 Августа 2011, 23:32:25 |
|
|
|
Denialsan | Дата: Понедельник, 22 Августа 2011, 23:31:33 | Сообщение # 9 |
10 уровень
Группа: Проверенные
Сообщений: 1225
Награды: 0
Репутация: 48
Блокировки:
| Quote (lawson) Я могу предложить тебе варинт создавать юнитов по координатам CreateUnit() без областей и без удаления точек. Но эта функция работает только для одного юнита поэтому придется делать это церез цикл или таймер. это будет слишком геморно! а удаление точки покатит еслинапишу call RemoveLocation (udg_LastUnit[n]) ласт юнит - это переменная в которую я буду заносить последнего созданного юнита.
|
|
|
|
lawson | Дата: Понедельник, 22 Августа 2011, 23:36:44 | Сообщение # 10 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Denialsan, Я не знаю, ты почему то вбил себе в голову что именно точки вызывают лаги при создании юнитов. Это не так не удаленные точки висят в оперативной памяти, а глючит тебя изза того что твоя функция вызывает еще функции и вот имеено с этим делом твой проц и не справляется поэтому и глюки возникают. Не знаю как тебе объяснить это надо чтоб ты понял из чего состоит твоя функция создания юнитов, это как бы ссылка на ссылку которая еще имеет ссылку на функцию и только потом создается юнит, вот изза чего глючит. Проц совершает слишком много действий вот почему опытные жассеры называют такие функции BJ и почему их пытаются максимально раскрыть.
Добавлено (22 Август 2011, 23:36:44) --------------------------------------------- Quote (Denialsan) а удаление точки покатит еслинапишу call RemoveLocation (udg_LastUnit[n]) ласт юнит - это переменная в которую я буду заносить последнего созданного юнита. Не нужно делать переменную массивом udg_LastUnit[n] можно без массива. К тому же это тоже нагружает.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Понедельник, 22 Августа 2011, 23:37:17 |
|
|
|
Denialsan | Дата: Понедельник, 22 Августа 2011, 23:37:34 | Сообщение # 11 |
10 уровень
Группа: Проверенные
Сообщений: 1225
Награды: 0
Репутация: 48
Блокировки:
| Quote (lawson) Denialsan, Я не знаю, ты почему то вбил себе в голову что именно точки вызывают лаги при создании юнитов. Это не так не удаленные точки висят в оперативной памяти, а глючит тебя изза того что твоя функция вызывает еще функции и вот имеено с этим делом твой проц и не справляется поэтому и глюки возникают. Не знаю как тебе объяснить это надо чтоб ты понял из чего состоит твоя функция создания юнитов, это как бы ссылка на ссылку которая еще имеет ссылку на функцию и только потом создается юнит, вот изза чего глючит. Проц совершает слишком много действия вот почему опытные жассеры называют такие функции BJ и почему их пытаются максимально раскрыть. то можно точки и не удалять?
у меня еще один вопрос: если у меня один триггер с событием map initialization а потом если я через некоторое время запущу новый триггер с таким же событием, то триггер будет работать?
|
|
|
|
lawson | Дата: Понедельник, 22 Августа 2011, 23:38:42 | Сообщение # 12 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (Denialsan) то можно точки и не удалять? Нет их удалять нужно ведь проц зависит и от оперативной памяти. Чем больше ее забито тем меньше к ней может обратиться проц.
Добавлено (22 Август 2011, 23:38:42) --------------------------------------------- Quote (Denialsan) у меня еще один вопрос: если у меня один триггер с событием map initialization а потом если я через некоторое время запущу новый триггер с таким же событием, то триггер будет работать? А извини внимательно не прочитал. ТАк ты второй триг имеено запускаешь после выполения первого трига? тогда нет не будет работать.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Понедельник, 22 Августа 2011, 23:44:45 |
|
|
|
Denialsan | Дата: Понедельник, 22 Августа 2011, 23:46:56 | Сообщение # 13 |
10 уровень
Группа: Проверенные
Сообщений: 1225
Награды: 0
Репутация: 48
Блокировки:
| Quote (lawson) А извини внимательно не прочитал. Так ты второй триг имеено запускаешь после выполения первого трига? тогда нет не будет работать. а как сделать чтобы запускался? нужно другое условие? и напиши как правильно удалить точки созданного юнита?
|
|
|
|
lawson | Дата: Вторник, 23 Августа 2011, 00:00:38 | Сообщение # 14 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (Denialsan) а как сделать чтобы запускался? Просто создай действия: я не помню как на гуи ну там есть в разделе триггеры. Там вроде запустить какой то триг выполняя все условия. Помоему так, и тогда триггер сразу выполнит действия. Или тебе нужно его просто активировать но не выполнять?
Добавлено (23 Август 2011, 00:00:38) --------------------------------------------- Quote (Denialsan) и напиши как правильно удалить точки созданного юнита? вообще так call RemoveLocation(переменная области) для этого заноси заранее созданную область в перменную и по окончанию всех действия удаляй ее.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Вторник, 23 Августа 2011, 00:06:41 |
|
|
|
Denialsan | Дата: Вторник, 23 Августа 2011, 00:15:26 | Сообщение # 15 |
10 уровень
Группа: Проверенные
Сообщений: 1225
Награды: 0
Репутация: 48
Блокировки:
| Quote (lawson) для этого заноси заранее созданную область в перменную и по окончанию всех действия удаляй ее. заносить область в переменную?
|
|
|
|
lawson | Дата: Вторник, 23 Августа 2011, 00:17:34 | Сообщение # 16 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (Denialsan) заносить область в переменную? ну у тебя она рндомно выбирается? тогда set область = рандомная точка на карте Или ты хотел сразу писать где создавать юнита, тогда ты и как не удалишь точку.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
|
|
|
|
Mep3aB4uK | Дата: Вторник, 23 Августа 2011, 00:19:21 | Сообщение # 17 |
9 уровень
Группа: Проверенные
Сообщений: 1019
Награды: 0
Репутация: 135
Блокировки:
| call RemoveLocation(udg_точка) Добавлено (23 Август 2011, 00:19:21) --------------------------------------------- Я делал через области. Каждые 5 сек. Юнит(переменная героя при продаже) контантирует с регионом1 если количество юнитов в регионе1 меньше равно 15 то цыкл от 1 до 5 точка=случайная точка в регионе1 создать случайного юнита в точка удалить точка
|
|
|
|
lawson | Дата: Вторник, 23 Августа 2011, 00:24:39 | Сообщение # 18 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Mep3aB4uK,Quote (Mep3aB4uK) Каждые 5 сек. я ему тоже предлага через таймер.
Добавлено (23 Август 2011, 00:24:39) --------------------------------------------- Quote (lawson) точка=случайная точка в регионе1 создать случайного юнита в точка удалить точка А это зачем через точку? можно через координаты.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Вторник, 23 Августа 2011, 00:28:48 |
|
|
|
Denialsan | Дата: Вторник, 23 Августа 2011, 00:30:38 | Сообщение # 19 |
10 уровень
Группа: Проверенные
Сообщений: 1225
Награды: 0
Репутация: 48
Блокировки:
| Quote (lawson) А это зачем через току? можно через координаты. типа создавать юнита с координатами в регионе? лучше пример, я не пойму. для ясности, у меня карта усеяна регионами,вот в каждом регионе я создаю юнита, только в случайной точке региона.
|
|
|
|
lawson | Дата: Вторник, 23 Августа 2011, 00:32:55 | Сообщение # 20 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (Denialsan) типа создавать юнита с координатами в регионе? лучше пример, я не пойму. Кароче вот как CreateUnit(player, unit id, рандомная точка х, рандомная точка у, 0 ) вот что я имел ввиду здесь не надо ни создавать точки поэтому и не надо их удалять.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Вторник, 23 Августа 2011, 00:34:50 |
|
|
|
Denialsan | Дата: Вторник, 23 Августа 2011, 00:35:17 | Сообщение # 21 |
10 уровень
Группа: Проверенные
Сообщений: 1225
Награды: 0
Репутация: 48
Блокировки:
| Quote (lawson) Кароче вот как CreateUnit(player, unit id, рандомная точка х, рандомная точка у, 0 ) вот что я имел ввиду здесь не надо ни создавать точки поэтому и не надо их удалять. напиши как создавать для нейтрально-враждебного
|
|
|
|
lawson | Дата: Вторник, 23 Августа 2011, 00:43:16 | Сообщение # 22 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| call CreateUnit(Player(PLAYER_NEUTRAL_AGGRESSIVE), unit id, рандом координаты x, рандом координаты у, 0) х и у = точки целоисчислительные они не вызывают утечек поэтому можно делать с ними что угодно. unit id = рав код твоего юнита. Смотри в РО. Эта функция создает только одного юнита, еще раз повторяю для твоего варанта нуже цикл или таймер чтобы периодически создавал юнитов, к стати втоя функция по которой ты создаешь юнитов работает по этой функции что я писал только твоя функция не выполняет действия а только ссылается на эту функцию CreateUnit() и еще вызывает утечку.
Добавлено (23 Август 2011, 00:43:16) --------------------------------------------- Вот твоя функция так сказать в разрезе вот сколько надо процессору сделать дейсвий чтобы создать юнита + вызывает утечку(область)
function CreateNUnitsAtLocFacingLocBJ takes integer count, integer unitId, player whichPlayer, location loc, location lookAt returns group return CreateNUnitsAtLoc(count, unitId, whichPlayer, loc, AngleBetweenPoints(loc, lookAt)) endfunction
function CreateNUnitsAtLoc takes integer count, integer unitId, player whichPlayer, location loc, real face returns group call GroupClear(bj_lastCreatedGroup) loop set count = count - 1 exitwhen count < 0 call CreateUnitAtLocSaveLast(whichPlayer, unitId, loc, face) call GroupAddUnit(bj_lastCreatedGroup, bj_lastCreatedUnit) endloop return bj_lastCreatedGroup endfunction
function CreateUnitAtLocSaveLast takes player id, integer unitid, location loc, real face returns unit if (unitid == 'ugol') then set bj_lastCreatedUnit = CreateBlightedGoldmine(id, GetLocationX(loc), GetLocationY(loc), face) else set bj_lastCreatedUnit = CreateUnitAtLoc(id, unitid, loc, face) endif
return bj_lastCreatedUnit endfunction
и сравни одну функцию CreateUnit()
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Вторник, 23 Августа 2011, 00:43:56 |
|
|
|
Denialsan | Дата: Вторник, 23 Августа 2011, 00:44:45 | Сообщение # 23 |
10 уровень
Группа: Проверенные
Сообщений: 1225
Награды: 0
Репутация: 48
Блокировки:
| к примеру: call CreateUnit(Player(PLAYER_NEUTRAL_AGGRESSIVE),id,x,101,y,83) так?
|
|
|
|
lawson | Дата: Вторник, 23 Августа 2011, 00:46:48 | Сообщение # 24 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (Denialsan) call CreateUnit(Player(PLAYER_NEUTRAL_AGGRESSIVE), здесь рав код юнита которого хочешь создать, здесь координата х, здесь координата у, а здесь любое число от 0 до 360)
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Вторник, 23 Августа 2011, 00:47:26 |
|
|
|
Denialsan | Дата: Вторник, 23 Августа 2011, 00:47:39 | Сообщение # 25 |
10 уровень
Группа: Проверенные
Сообщений: 1225
Награды: 0
Репутация: 48
Блокировки:
| Quote (lawson) а здесь любое число от 0 до 360) а зачем это число?
|
|
|
|
|
|
|
|
|
|
|