Сейчас 23:54:52 Четверг, 28 марта, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » Оптимизация льда
Оптимизация льда
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


╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

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(юнит,у)
я круче fuckyeah


El Psy Congroo
 

Ty3uKДата: Вторник, 20 Сентября 2011, 10:41:42 | Сообщение # 5
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Ну ладно, убедил :D хотя разницы практически нет- у тебя в сущности одна лишняя строка кода, а следовательно лишнее действие ^_^

Добавлено (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- угол смещения


╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

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
Блокировки:
Тут я уже не помощник, не сталкивался с подобной ситуацией :)

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

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- плавное движение юнита гарантирую

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

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.))
В таком случае он будет скользить в разные стороны


╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

DarkCoteДата: Среда, 21 Сентября 2011, 15:35:03 | Сообщение # 13
Кот
Группа: Проверенные
Сообщений: 948
Награды: 0
Репутация: 176
Блокировки:
Ty3uK, это управляемое скольжение?
 

Ty3uKДата: Среда, 21 Сентября 2011, 15:38:48 | Сообщение # 14
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
DarkCote, не совсем управляемое. Если функцию использовать как я написал выше в триггере с переодическим действием(или в таймере), то она будет двигать твоего юнита на указанное тобой расстояние с рандомным углом смещения, т.е. может влево, может вправо и т.д.

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » Оптимизация льда
  • Страница 1 из 1
  • 1
Поиск:

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