Оптимизация льда
|
|
DarkCote | Дата: Понедельник, 19 Сентября 2011, 23:41:34 | Сообщение # 1 |
Кот
Группа: Проверенные
Сообщений: 948
Награды: 0
Репутация: 176
Блокировки:
| Стоит в моей карте обычный триггер на скольжение по льду. Но всегда есть лаги(у всех кроме хоста) при скольжении. Сам триггер, это 2 вещи: Событие - Каждые 0.07 секунд Действие - Если земля под (юнит) = лёд, тогда двигать(бла-бла-бла, думаю знаете) на 20. Как можно оптимизировать триггер вообще без JASSа и Личного Кода?(ну и что-бы ещё хуже визуально не выглядело, а то уже видны мелкие скачки)
|
|
|
|
ZmeyGormonbl4 | Дата: Понедельник, 19 Сентября 2011, 23:48:19 | Сообщение # 2 |
3 уровень
Группа: Пользователи
Сообщений: 53
Награды: 0
Репутация: 8
Блокировки:
| Думаю ты пользуешься полярными координатами. Они создают утечку. Сам сталкивался с такой проблемой. Решение именно этой проблемы описано в этой статье: http://xgm.ru/p/wc3/jass_optimisations_and_leaks Увы придется использовать Личный код. Если хочешь могу написать тебе весь триггер.
|
|
|
|
Ty3uK | Дата: Вторник, 20 Сентября 2011, 08:11:07 | Сообщение # 3 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| local rear x =GetUnitX(юнит) + 20. * Cos(GetUnitFacing(юнит) * bj_DEGTORAD) local rear y =GetUnitY(юнит) + 20. * Sin(GetUnitFacing(юнит) * bj_DEGTORAD) call SetUnitPosition(юнит, x, y) безутечно без жасса ты не сделаешь, полярки в топку- юзай координаты. Если юнит записан в глобальную переменную, то вписывай его с приставкой udg_, то есть, например, udg_caster
|
|
|
|
DragoN | Дата: Вторник, 20 Сентября 2011, 09:41:17 | Сообщение # 4 |
Инквизитор
Группа: Стримеры
Сообщений: 4348
Награды: 7
Репутация: 2776
Блокировки:
| Quote (Ty3uK) local rear x =GetUnitX(юнит) + 20. * Cos(GetUnitFacing(юнит) * bj_DEGTORAD) local rear y =GetUnitY(юнит) + 20. * Sin(GetUnitFacing(юнит) * bj_DEGTORAD) call SetUnitPosition(юнит, x, y) local rear x =GetUnitX(юнит) + 20. * Cos(GetUnitFacing(юнит) * bj_DEGTORAD) local rear y =GetUnitY(юнит) + 20. * Sin(GetUnitFacing(юнит) * bj_DEGTORAD) call SetUnitX(юнит,x) call SetUnitY(юнит,у) я круче
El Psy Congroo
|
|
|
|
Ty3uK | Дата: Вторник, 20 Сентября 2011, 10:41:42 | Сообщение # 5 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Ну ладно, убедил хотя разницы практически нет- у тебя в сущности одна лишняя строка кода, а следовательно лишнее действие Добавлено (20 Сентябрь 2011, 10:41:42) --------------------------------------------- В таком случае, уж если быть дотошным, то делать так: function SetPosition takes unit u, real dist, real facing returns nothing local real x = GetUnitX(u) + dist * Cos(facing * bj_DEGTORAD) local real y = GetUnitY(u) + dist * Sin(facing * bj_DEGTORAD) SetUnitX(u, x) SetUnitY(u, y) endfunction где u- юнит, которого надо двигать, dist- расстояние смещения, facing- угол смещения
|
|
|
|
DarkCote | Дата: Вторник, 20 Сентября 2011, 13:52:07 | Сообщение # 6 |
Кот
Группа: Проверенные
Сообщений: 948
Награды: 0
Репутация: 176
Блокировки:
| А если учесть один факт: Карта не для TFT(RoC, кроме него вариантов-то и нет). Там этот код есть? А то я знаю, что там очень мало jass'a, хотя лёд без лагов в Polar Escape есть...
|
|
|
|
Ty3uK | Дата: Вторник, 20 Сентября 2011, 18:08:29 | Сообщение # 7 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Тут я уже не помощник, не сталкивался с подобной ситуацией
|
|
|
|
ZmeyGormonbl4 | Дата: Вторник, 20 Сентября 2011, 20:39:41 | Сообщение # 8 |
3 уровень
Группа: Пользователи
Сообщений: 53
Награды: 0
Репутация: 8
Блокировки:
| Да, кстати Quote Но всегда есть лаги(у всех кроме хоста) при скольжении.
Странно что у всех кроме хоста. У меня перемещается юнит каждые 0.05 сек. Когда я попробовал переставить на 0.07, то тоже увидел "лаги". Точнее не лаги, а юнит двигался как бы рывками. Это из за строения человеческого глаза. Кадры в секунду и все такое.
|
|
|
|
Ty3uK | Дата: Вторник, 20 Сентября 2011, 21:03:55 | Сообщение # 9 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Фига. Период ставь в 0.01- плавное движение юнита гарантирую
|
|
|
|
wetalq | Дата: Вторник, 20 Сентября 2011, 21:28:47 | Сообщение # 10 |
8 уровень
Группа: Проверенные
Сообщений: 550
Награды: 0
Репутация: 117
Блокировки:
| DarkCote, если без джас и лишних сценариев то больше вариантов нету, но всетаки лучше бы записывать в переменные, точку юнита и смещения в переменные а потом их обнулить, а еще лучше на Jass так как писали выше
|
|
|
|
DarkCote | Дата: Среда, 21 Сентября 2011, 15:06:16 | Сообщение # 11 |
Кот
Группа: Проверенные
Сообщений: 948
Награды: 0
Репутация: 176
Блокировки:
| wetalq, можно карту с этой наработкой(лёд с переменными)? А то сейчас друг объяснил как это всё хитрое дело делается и я только больше запутался. Зачем-то надо было создать 2 группы, 2 переменные точки(центр и смещение) и это всё слепить в один триггер. Точки я понял, а группы уже нет...
|
|
|
|
Ty3uK | Дата: Среда, 21 Сентября 2011, 15:12:43 | Сообщение # 12 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| DarkCote, я лично тоже не понял. То, что я кидал вполне подходит. Можно сделать, чтобы юнит уезжал в разные стороны, а не только вперед, тогда надо юзать функцию так: Code function SetPosition takes unit u, real dist, real facing returns nothing local real x = GetUnitX(u) + dist * Cos(facing * bj_DEGTORAD) local real y = GetUnitY(u) + dist * Sin(facing * bj_DEGTORAD) SetUnitX(u, x) SetUnitY(u, y) endfunction call SetPosition(unit, dist, GetRandomReal(0., 360.)) В таком случае он будет скользить в разные стороны
|
|
|
|
DarkCote | Дата: Среда, 21 Сентября 2011, 15:35:03 | Сообщение # 13 |
Кот
Группа: Проверенные
Сообщений: 948
Награды: 0
Репутация: 176
Блокировки:
| Ty3uK, это управляемое скольжение?
|
|
|
|
Ty3uK | Дата: Среда, 21 Сентября 2011, 15:38:48 | Сообщение # 14 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| DarkCote, не совсем управляемое. Если функцию использовать как я написал выше в триггере с переодическим действием(или в таймере), то она будет двигать твоего юнита на указанное тобой расстояние с рандомным углом смещения, т.е. может влево, может вправо и т.д.
|
|
|
|