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

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

Ответ
 
JET_LI

offline
Опыт: 1,724
Активность:
Привязка камеры к рельефу
Я абсолютно справился с этой задачей! (считал я пока не встретился с одной проблемой)
В общем я получал Z юнита и ставил её в CAMERA_FIELD_ZOFFSET
С Angle Of Attack я тоже справился высчитал всё! в общем всё красиво работает, но есть одно но:
Когда я получаю z юнита - GetLocationZ(u) и устанавливаю значение в ZOffset камеры...
она ведёт себя странно, слишком высоко поднимается, но координаты неверны!
Почему так??? ZOffset почему так реагирует неправильно?
Это обычно происходи когда z > 400 примерно....
В чём всё-таки дело?
Z юнита уверен что правильно получен и корректно! В редакторе тоже самое выдаёт....
Ошибки в скрипте нет, я уверен!
Старый 15.01.2010, 19:50
JET_LI

offline
Опыт: 1,724
Активность:
мм никто неужели не знает?????
-(((
Старый 16.01.2010, 14:56
Таурен
The Ps*c*oto*ia ORPG
offline
Опыт: 2,078
Активность:
JET_LI, мб высота юнита дает сбой? Глянь в РО. поставь минимальную и макс высоту юнита одинаковой.
Старый 16.01.2010, 14:58
JET_LI

offline
Опыт: 1,724
Активность:
Говорю же в редакторе когда навожу просто на любую точку выдаёт тоже самое значение высоты...
может быть единицы измерения разные????
Старый 16.01.2010, 15:04
Таурен
The Ps*c*oto*ia ORPG
offline
Опыт: 2,078
Активность:
Типы данных. Высота юнита указывается в real. А у тебя по идее в int. Мб это?
Старый 16.01.2010, 15:07
JET_LI

offline
Опыт: 1,724
Активность:
Нуууу!
GetLocationZ и так real!
у меня всё в real, я говорю о том, может быть камера по другому (с другого места) считает Z...
я простон незнаю чё думать уже!!
Старый 16.01.2010, 15:08
JET_LI

offline
Опыт: 1,724
Активность:
может кто-то сталкивался с подобной проблемой???
вообще я делаю перемещения юнита с помощью стрелочек...
а что камера не взрезалась, приходиться её постоянно к рельефу прижимать...
она не врезается, но слишком высоко получается стоит над юнитом
Старый 16.01.2010, 19:11
agentex

offline
Опыт: 34,834
Активность:
она не врезается, но слишком высоко получается стоит над юнитом
Т_Т об операции вычитание мы не слышали?
Старый 16.01.2010, 19:16
JET_LI

offline
Опыт: 1,724
Активность:
дело в том, это присходит когда юнит поднимается свыше 500 и здесь начинается камера становиться выше юнита-((
там чем больше юнит поднялся тем больше разрыв идёт...
так что вычитание не вкатывает-(
здесь нужна какая-нибудь зависимость или что-то вроде неё
Старый 16.01.2010, 19:41
agentex

offline
Опыт: 34,834
Активность:
там нет никакой зависимости, все элементарно.. выложы полный код системы, разберемся
Старый 16.01.2010, 20:36
JET_LI

offline
Опыт: 1,724
Активность:
ок
JET_LI добавил:
globals
    unit array udg_unit
    integer countpls=0
    real DefaultRate=5.00
    real MaxRate=20.00
    boolean array KeyUp
    boolean array KeyDown
    boolean array KeyLeft
    boolean array KeyRight
    hashtable hash=InitHashtable()
endglobals

real GetTerrainZ(location loc){
    return GetLocationZ(loc)-256 // вычитаю cliff level 2
}

function Speed2Px takes integer speed returns real
    return SquareRoot(speed)/4
endfunction

function PartOfPercent takes real percent, real number returns real
    return (percent/100)*number
endfunction

function setCamera takes unit u returns nothing
    local player pl=GetOwningPlayer(u)
    local integer ind=GetConvertedPlayerId(pl)-1
    local real uface=GetUnitFacing(u)
    local location uloc=GetUnitLoc(u)
    local real x=GetLocationX(uloc)
    local real y=GetLocationY(uloc)
    local real z=GetTerrainZ(uloc)
    local real b=40
    local real z2
    local real c
    local real aoa
    local real randroll
    call PanCameraToTimedLocForPlayer(pl,uloc,0)
    call SetCameraQuickPositionLocForPlayer(pl,uloc)
    call MoveLocation(uloc,x+b*CosBJ(uface),y+b*SinBJ(uface))
    set z2=GetTerrainZ(uloc)
    set c=RAbsBJ(z2-z)
    set aoa=Atan(c/b)*bj_RADTODEG
    if (z2<z) then
        set aoa=360-aoa
    endif
    call SetCameraFieldForPlayer(pl,CAMERA_FIELD_ZOFFSET,120.00+z,0)
    call SetCameraFieldForPlayer(pl,CAMERA_FIELD_ANGLE_OF_ATTACK,aoa,0.25)
    call SetCameraFieldForPlayer(pl,CAMERA_FIELD_ROTATION,uface,0)
    call SetCameraFieldForPlayer(pl,CAMERA_FIELD_TARGET_DISTANCE,100,0)
    call SetCameraFieldForPlayer(pl,CAMERA_FIELD_FARZ,10000,0)
    call SetCameraFieldForPlayer(pl,CAMERA_FIELD_FIELD_OF_VIEW,120,0)
    if (KeyUp[ind]) then
        set randroll=GetRandomReal(-1,1)
        call SetCameraFieldForPlayer(pl,CAMERA_FIELD_ROLL,randroll,0.25)
    else
        call SetCameraFieldForPlayer(pl,CAMERA_FIELD_ROLL,0,0.25)
    endif
    call RemoveLocation(uloc)
    set pl=null
    set uloc=null
    set u=null
    set aoa=0
    set ind=0
    set randroll=0
    set c=0
    set z2=0
    set b=0
    set z=0
    set y=0
    set x=0
    set uface=0
endfunction
JET_LI добавил:
кстати эта функция setCamera вызывается каждую 0.01 сек.
JET_LI добавил:
систему перемещения юнита надо???=))
setCamera как вы поняли обновляет все св-ва камеры, чтобы она не врезалась в рельеф
Старый 17.01.2010, 13:27
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
real GetTerrainZ(location loc){
return GetLocationZ(loc)-256 // вычитаю cliff level 2
}
что это такое???
Старый 17.01.2010, 13:30
JET_LI

offline
Опыт: 1,724
Активность:
не обращай внимание=))))
в общем GetLocationZ эта функция берёт с 0 cliff level, то есть получается когда cliff level = 2
то Z будет 256, так на каждый cliff выделяется 128
тут всё правильно, 256 вычитаю чтобы была не абсолютная Z а относительно cliff level
JET_LI добавил:
угол атаки тоже работает норм, через арктангенс получаю угол, если юнит бежит в горку то 0+арктан, если вниз = 360-арктан
JET_LI добавил:
?
JET_LI добавил:
если тебя смущает синтактис, то я автоматизмом написал на C=)
но у меня редактор с поддержкой cJass, так что всё норм=)
JET_LI добавил:
function GetTerrainZ takes location loc returns real
    return GetLocationZ(loc)-256 // вычитаю cliff level 2
endfunction
JET_LI добавил:
какая разница cJass или vJass все равно компилятся все они в Jass
=)
Старый 17.01.2010, 14:40
agentex

offline
Опыт: 34,834
Активность:
надо убрать все эти SetCameraFieldForPlayer и оставть только те которые динамически меняются. + я не совсем понял причем тут клифы.
Старый 17.01.2010, 15:14
JET_LI

offline
Опыт: 1,724
Активность:
ну допустим я их уберу! и чё измениться????
а на счёт -256 не обращайте внимание!!! это правильно я уверен!
дело в том что getlocationz получает Z с отчётом от клиф = 0
а если клиф изначально = 2
то она будет получать не относительно карты, а считатывать полностью Z от клиф = 0 до точки в параметрах этой функции...
JET_LI добавил:
ну так что+) в чём всё-таки дело?
Старый 17.01.2010, 17:25
Ответ

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

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

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

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



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