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

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

Ответ
 
JET_LI

offline
Опыт: 1,724
Активность:
Измерение расстояния по Z
Как мне измерить точку Z ? Скажу пример: мне надо сделать так, чтобы юнит не ходил на высокие горы (препятствия), то есть я думаю, что надо измерять высоту опр. подъёма, например: если точка Z препятствия, находящегося со смещением текущей позиции юнитом на 5>100 то не приказать ему отставить (Order).
Можете сказать как это реализовать или есть другие идеи по этому поводу?
Но не надо плиз говорить "раставь блокираторы пути" ))).
Старый 27.02.2009, 20:24
Hellfim
Новичок
offline
Опыт: 79,637
Активность:
JET_LI
Код:
function GetLocZ takes real x, real y returns real
    local location loc=Location(x,y)
    local real z=0
    set z=GetLocationZ(loc)
    call RemoveLocation(loc)
    set loc=null
    return z
endfunction

как-то так
Старый 27.02.2009, 21:30
Ranger21
I love beatiul days XD
offline
Опыт: 13,274
Активность:
Кстати интересная идея... а можно ли вместо блокираторов путей написать такую функцию?) Будет ли она работать и не будет ли это слишком загружать карту?
Старый 27.02.2009, 21:36
Hellfim
Новичок
offline
Опыт: 79,637
Активность:
Ranger21, да не особо будет.

Hellfim добавил:
Только можно просто писать GetLocationZ, если у тебя уже есть точка.
Старый 27.02.2009, 21:59
JET_LI

offline
Опыт: 1,724
Активность:
А что вы в замен предлагаите!? Потому что блок. путей не выгодно ставить слишком, уж большое кол-во получается декораций, а мне ланшафт ещё отрисовывать надо! Вывод: получается карта состоит из одних блок. путей, т.к их максимум около 9000! (((
И тем более в мапе TcX есть такая функция, правдо там много чего есть, неоткрытого мной! )
Посмотрите в этой мапе, там идут подъёмы высокие, то есть плавные увелечения высоты ланшафта.
Я так же сделал в своей мапе просто это выгодно, когда охото выразить особо высокие горы. Но эти подъёмы имеют минус - независимо какая высота, юнит всё равно поднимится на неё!. Именно поэтому мне нуно условие - высота точки со смещением 5 по лицу юнита не больше 100 то тогда юнит пройдёт иначе приказ - отставить!(
Старый 27.02.2009, 22:19
Ranger21
I love beatiul days XD
offline
Опыт: 13,274
Активность:
JET_LI Качай JNGP (Jass GEN newpack) и сможешь ставить на карту большее количество декораций... и сможешь делать горы блокираторами путей.... ))))

На производительности карты они не скажутся почти
Старый 27.02.2009, 22:29
Van Damm
wait... what?
offline
Опыт: 22,268
Активность:
Hellfim
Код:
globals
   location tmpLoc
endglobals

function GetZ takes real x, real y returns real
   call MoveLocation(tmpLoc,x,y)
   return GetLocationZ(tmpLoc)
endfunction

...
   set tmpLoc = Location(0,0)
...



JET_LI^ вместо блокираторов можешь использовать карту путей http://xgm.guru/articles.php?name=acpl
Старый 27.02.2009, 23:01
agentex

offline
Опыт: 34,834
Активность:
Hellfim, в компьютере одновременно ничего не происходит, даже если потоки параллельно работают
Старый 27.02.2009, 23:45
Hellfim
Новичок
offline
Опыт: 79,637
Активность:
agentex, я имел ввиду вот что:
Из потока 1 вызвали функцию GetZ, и в это же время вызвали GetZ. Я понимаю, что потоки параллельны, но точка tmpLoc же "общая". Или ты намекаешь, что пока выполняется 1 поток, другой ждет? Это же бред...
Старый 27.02.2009, 23:52
Garret
Недоброе творится
offline
Опыт: 3,893
Активность:
Hellfim
Почему бред? ВСЁ делается в варкрафте последовательно, будь-то какое-нибудь нанесение урона или действия джасс-кода.... Вспоминается вопросы типа: "А что будет, если Vengeful Spirits используют свою ульту одновременно друг на друге?".....
Старый 28.02.2009, 08:53
adic3x

offline
Опыт: 108,439
Активность:
делать как сказал вД

однако для вопроса проходимости именно гор (сабж из первого поста) изпользовать блокираторы/карту путей

Цитата:
Из потока 1 вызвали функцию GetZ, и в это же время вызвали GetZ. Я понимаю, что потоки параллельны, но точка tmpLoc же "общая". Или ты намекаешь, что пока выполняется 1 поток, другой ждет? Это же бред...

напомню что процесоры семейства 386 могут выполнятьтолько одну инструкцию за такт, т.е. конечно пни могут спаривать две инструкции, но только в том случае если это пройдет безболезненно, т.е. не повлияет на результат (ну это грубо говоря)

т.е. бред пишете как раз вы
Старый 28.02.2009, 10:25
ScorpioT1000
Работаем
online
Опыт: отключен
Hellfim, ты путаешь с 2 ф-циями где есть вейты/таймеры =)
здесь все моментально, даже если одновременно, т.е. в любом случае оно выполнится последовательно
Старый 28.02.2009, 12:34
Voronin
Ландшафтер
offline
Опыт: 720
Активность:
Можно создать обьект на основе какогонибудь блокиратора пути без модели и он будет невидимым! и все!
И нету мороки
Старый 28.02.2009, 14:10
Hellfim
Новичок
offline
Опыт: 79,637
Активность:
Voronin, типо ха-ха? Автору нужно чтоб было не больше 9к декораций, однако, действительно для таких целей рационально использовать JNPG.
Старый 28.02.2009, 14:18
J
expert
offline
Опыт: 48,447
Активность:
Цитата:
Из потока 1 вызвали функцию GetZ, и в это же время вызвали GetZ. Я понимаю, что потоки параллельны, но точка tmpLoc же "общая". Или ты намекаешь, что пока выполняется 1 поток, другой ждет? Это же бред...
Цитата:
напомню что процесоры семейства 386 могут выполнятьтолько одну инструкцию за такт, т.е. конечно пни могут спаривать две инструкции, но только в том случае если это пройдет безболезненно, т.е. не повлияет на результат (ну это грубо говоря)
на самом деле поток ведь один o_O
Старый 09.03.2009, 00:30
Toadcop

offline
Опыт: 54,313
Активность:
в варе тока евенты создают новые потоки... или триггерслипекшен (хотя это здесь спорно)
Старый 11.03.2009, 14:37
adic3x

offline
Опыт: 108,439
Активность:
екзекудФунцы разве нет?
Старый 12.03.2009, 16:30
MF
Что-то вокруг не так
offline
Опыт: 26,594
Активность:
Цитата:
Сообщение от Toadcop
в варе тока евенты создают новые потоки... или триггерслипекшен (хотя это здесь спорно)

А таймеры? Поток вроде как совсем другой получается.
Старый 12.03.2009, 16:44
Toadcop

offline
Опыт: 54,313
Активность:
ну... можно расматривать это как 2 варианта
  1. синхроные
  2. асинхроные
потоки
синхроные это ExecuteFunc TriggerExecute и т.п. и напр евент урона или смерти и другие. (это это действие "вклиниваетса на текущию точку исполнения кода")
есть асинхроные которые срабатывают после определёного времени (т.е. они не тормозят собой другие действия и идут "паррарельно" конечно учитывая что в данный момент может выполнятьа тока 1 поток. хотя я на 100% неуверен но обычно думаю что это так.)
тем самым... синхроные потоки не являютса потоками как таковыми. они более виртуальны...
Старый 12.03.2009, 16:48
adic3x

offline
Опыт: 108,439
Активность:
Цитата:
тем самым... синхроные потоки не являютса потоками как таковыми. они более виртуальны...

я считаю немного иначе, а именно, что они паузят текущий поток (как и дествия над группами/отрядами)
Старый 12.03.2009, 17:00
Ответ

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

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

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

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



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