XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Закрытая тема
 
Msey
????
offline
Опыт: 67,346
Активность:
подходящая формула
private void test(){
      unit u = GetEnumUnit()
      real x = GetUnitX(u)  
      real y = GetUnitY(u)   
      real a = x + 20. * Cos(GetUnitFacing(u))
      real b = y + 20. * Sin(GetUnitFacing(u)) 
real e = AngleBetweenCord(x, y, a, b)
location l = Location(a, b)
  a = (GetUnitZ(u) - GetLocationZ(l))
      if a > 1. {
                 SetUnitX(u, x + 5. * Cos(e))
                 SetUnitY(u, y + 5. * Sin(e))}
      elseif a < -1. {
                 SetUnitX(u, x - 5. * Cos(e))
                 SetUnitY(u, y - 5. * Sin(e))}
   ...
l = null; u = null
}
не получается составить формулу для манипуляции по смещению юнита в зависимости от склона,
сама переменная с рассчетом должна стать заменой числа 5
Старый 15.01.2012, 20:34
Nerevar
I'll be back!
offline
Опыт: 18,352
Активность:
      real a = x + 20. * Cos(GetUnitFacing(u))
      real b = y + 20. * Sin(GetUnitFacing(u)) 
Косинус и синус берут угол в радианах
Старый 15.01.2012, 20:53
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
Msey,
  1. Где RemoveLocation
  2. Немного геометрии и все получится
Смотрим картинку:
При движении ты двигаешь на S ед. Задача складывается к тому, что нужно найти проекцию S на плоскость. Пусть S' расстояние на которое нужно реально сдвинуть.
S' = S*Cos(A)
осталось найти нужный косинус
Cos(A) = Sqrt(1 - Sin^2(A))
Sin(A) = S / h
Cos(A) = Sqrt(1 - (S/h)^2)
S' = S*Sqrt(1-(S/h)^2)
и теперь мувим нашего героя
alexprey добавил:
ПС. Красный круг - твой юнит
alexprey добавил:
Теперь по оптимизации:
  1. Переменная e у тебя будет равна взгляду юнита. Логично её понять выше и присвоить её нужное значение, потом её везде использовать
  2. Локацию l лучше сделать глобальной и потом лишь двигать
Старый 15.01.2012, 21:20
Msey
????
offline
Опыт: 67,346
Активность:
alexprey:
Переменная e у тебя будет равна взгляду юнита. Логично её понять выше и присвоить её нужное значение, потом её везде использовать
Локацию l лучше сделать глобальной и потом лишь двигать
Если бы я шарил в этом, то и проблем бы не составило.
бтв буду разбираться. Спасибо, ты мне прям глаза открыл на геометрию.

закрывайте тему
Старый 16.01.2012, 15:01
Закрытая тема

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 12:00.