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

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

Закрытая тема
 
Линкольн
Barg Ent.
offline
Опыт: 4,812
Активность:
Как определить высоту рельефа позади/перед юнитом?
Нужны 2 функции для нахождения высоты рельефа перед юнитом (на дистанции 300), и позади юнита (на дистанции 200). Можно конечно и одну. Я потом параметры переделаю.
Хотел использовать полярные координаты, но у меня к ним стойкое отвращение. Делал через X Y, но «соединить» координаты в переменную толком не смог. Вот и хотел узнать, есть ли ещё способы?
Старый 05.11.2008, 19:28
PlayerDark
Coraline
offline
Опыт: 10,569
Активность:
Юзай полярки, если не плохо знаешь Джаз то для тебя это все равно не является чем то плохим. Тем более высоту рельефа можно получить только с помощью локации.
Старый 05.11.2008, 19:39
Линкольн
Barg Ent.
offline
Опыт: 4,812
Активность:
В том то и дело, что не люблю я полярки. Говорят, они то ли утечки вызывают, то ли память жрут. В общем не помню. Думаю, может попробовать использовать Location(0,0), а x и y находить через GetUnitX, GetUnitY. Такое возможно? Пока я сам пытаюсь, может кто и подскажет.
Старый 05.11.2008, 20:10
PlayerDark
Coraline
offline
Опыт: 10,569
Активность:
Если правильно юзать полярки то никаких утечек не будет
Старый 05.11.2008, 20:17
akkolt

offline
Опыт: 13,826
Активность:
Не надо полярки, если пишешь на жасс, их лучше не юзать.
Цитата:
Такое возможно?

Так и нужно делать.
Старый 05.11.2008, 20:21
PlayerDark
Coraline
offline
Опыт: 10,569
Активность:
akkolt в любом случае полярка одна из самых полезных функций, не нравятся локации - можно ее раскрыть. Еще раз повторяю, GetLocationZ - принимает только локацию !
Старый 05.11.2008, 20:30
Van Damm
wait... what?
offline
Опыт: 22,268
Активность:
Код:
function PolarProjectionX takes real x, real angle, real offset returns real
   return x+offset*Cos(angle*0.01745)
endfunction

function PolarProjectionY takes real y, real angle, real offset returns real
   return y+offset*Sin(angle*0.01745)
endfunction
и никаких утечек

Van Damm добавил:
Код:
globals
   location l = Location(0,0)
endglobals

function GetZOffset takes real x, real y, real angle, real offset returns real
   call MoveLocation(l,PolarProjectionX(x,angle,offset),PolarProjectionY(y,angle,offset)  )
   return GetLocationZ(l)
endfunction
пока я добрый

Van Damm добавил:
естественно, проджекшн на ура инлайнится джассхелпером
Старый 05.11.2008, 20:48
ShadoW DaemoN

offline
Опыт: 37,078
Активность:
Van Damm не-а =), в модификациях функций полярок параметры не идут по порядку => не будет инлайна. Посмотри вот эту тему, я там переводил часть справки джасс-хелпера по поводу инлайна. Так что можно сделать два варианта:
Код:
// #1
function PolarProjectionX takes real x, real offset, real angle returns real
  return x+offset*Cos(angle)
endfunction
function PolarProjectionY takes real y, real offset, real angle returns real
  return y+offset*Sin(angle)
endfunction
// #2
function PolarProjectionX takes real x, real angle, real offset returns real
  return x+Cos(angle)*offset
endfunction
function PolarProjectionY takes real y, real angle, real offset returns real
  return y+Sin(angle)*offset
endfunction

Я больше склоняюсь к 1 варианту, ибо во всеми ненавистной бж (PolarProjectionBJ) параметры идут именно таким образом =)
Я считаю ненужным умножать лишний раз на 0.01745, так как почти все функции принимают в качетсве угла значение в радианах (кроме GetUnitFacing / SetUnitFacing).

Кстати, ты меня на мысль навел, что пора наполнить библиотеку функций...
Старый 05.11.2008, 21:04
Линкольн
Barg Ent.
offline
Опыт: 4,812
Активность:
Всем спасибо. Отдельная благодарность: Van Damm'у, ShadoW DaemoN'у. Выручили. И последний вопрос на сегодня. Число 0.01745 как-то связанно с bj_DEGTORAD? Подозреваю, что это оно и есть.
Старый 05.11.2008, 21:05
ScorpioT1000
Работаем
offline
Опыт: отключен
Пи/180 то?
Старый 05.11.2008, 21:10
ShadoW DaemoN

offline
Опыт: 37,078
Активность:
Линкольн 6 Эхо, а ты догадливый:
Код:
constant real bj_DEGTORAD = bj_PI/180.0
constant real bj_PI       = 3.14159

Естественно лучше сразу подставлять 0.01745, оптимизация рулит =).
Старый 05.11.2008, 21:11
Van Damm
wait... what?
offline
Опыт: 22,268
Активность:
2 свдн: ну да, немного лопухнулся с порядком, я помню об этом в принципе
а насчет рад/дег, просто мне так привычнее, хотя действительно ситуация обстоит как ты сказал )
Старый 05.11.2008, 21:15
ScorpioT1000
Работаем
offline
Опыт: отключен
Цитата:
Естественно лучше сразу подставлять 0.01745, оптимизация рулит =).

ShadoW DaemoN, ничем не отличающиеся две константы
Старый 05.11.2008, 21:19
PlayerDark
Coraline
offline
Опыт: 10,569
Активность:
Омг, неужели так важно писатть 0.01745 вместо bj_DEGTORAD ?
Старый 05.11.2008, 21:24
ScorpioT1000
Работаем
offline
Опыт: отключен
даже наобород, зря новую константу вводишь
Старый 05.11.2008, 21:27
PlayerDark
Coraline
offline
Опыт: 10,569
Активность:
Да, и еще я считаю что это :

Цитата:
globals
location l = Location(0,0)
endglobals

function GetZOffset takes real x, real y, real angle, real offset returns real
call MoveLocation(l,PolarProjectionX(x,angle,offset),PolarProjectionY(y,angle,offset) )
return GetLocationZ(l)
endfunction


будет реально медленнее чем полярка + GetLocationZ + удаление полярки.
Старый 05.11.2008, 21:28
ScorpioT1000
Работаем
offline
Опыт: отключен
BJ полярка дает утечку

Отредактировано ScorpioT1000, 05.11.2008 в 21:34.
Старый 05.11.2008, 21:29
PlayerDark
Coraline
offline
Опыт: 10,569
Активность:
Цитата:
удаление полярки.
Старый 05.11.2008, 21:32
Van Damm
wait... what?
offline
Опыт: 22,268
Активность:
PlayerDark try test it?

Van Damm добавил:
ну и еще покажи свой код на этот счет )
Старый 05.11.2008, 22:00
ScorpioT1000
Работаем
offline
Опыт: отключен
Цитата:
function PolarProjectionX takes real x, real angle, real offset returns real
return x+offset*Cos(angle*0.01745)
endfunction

function PolarProjectionY takes real y, real angle, real offset returns real
return y+offset*Sin(angle*0.01745)
endfunction

а вот это все сунуть прямо в ф-цию и не тратить время на ненужный вызов
Старый 05.11.2008, 22:03
Закрытая тема

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

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

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

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



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