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

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

 
Aspid

offline
Опыт: 8,361
Активность:
Trackables
Автор данной статьи - KaTTana c http://jass.com

Введение
Тракэйбл - специальный объект ассоцированый с моделью, отображаемой в игре. При наведении(или при щелчке) мыши на модель, с тракэйблом можно производить определенные действия.
Основная проблема работы с тракэйблами состоит в том что мы не можем их перемещать, удалять или скрывать. (все верно но мы можем вынести их в отдельную область и при необходимости переносить туда камеру. примечание - Avatar)
Тракэйблы работают в мультиплеере.

Создание тракэйблов:
Код:
native CreateTrackable takes string trackableModelPath, real x, real y, real facing returns trackable


Пример создания тракэйблов
Код:
local trackable tr = CreateTrackable("Buildings\\Human\\HumanTower\\HumanTower.mdl", -1024, 512, 90)

(для тех кто фтанке - тут мы присваиваем переменной tr типа trackable модель-тракэйбл хуманов. примечание Avatar)

События активации тракэйбла:
Код:
native TriggerRegisterTrackableHitEvent takes trigger whichTrigger, trackable t returns event
native TriggerRegisterTrackableTrackEvent takes trigger whichTrigger, trackable t returns event

TrackableHitEvent - активация по щелчку мыши на модели-тракэйбле.
TrackableTrackEvent - активация при наведении мыши на тракэйбл.

Использование тракэйблов.
Еще один момент связаный с тракэйблами
Код:
native GetTriggeringTrackable takes nothing returns trackable

Это относится к тракэйблам активированых событием TrackableHitEvent Мы не имеем возможности определить координаты (x,y) тракэйбла. Но у нас есть возможность обращаться к ним непосредственно с помощью локальных переменных типа Handle.
Ниже приведен пример использования тракэйблов(Trackable API)

Код:
// ===========================
//   Trackable API

function GetTrackableX takes trackable tc returns real
    return GetHandleReal(tc, "x")
endfunction
function GetTrackableY takes trackable tc returns real
    return GetHandleReal(tc, "y")
endfunction
function GetTrackableFacing takes trackable tc returns real
    return GetHandleReal(tc, "facing")
endfunction
function GetTrackablePath takes trackable tc returns string
    return GetHandleString(tc, "path")
endfunction

function NewTrackable takes string path, real x, real y, real facing returns trackable
    local trackable tc = CreateTrackable(path, x, y, facing)
    call SetHandleReal(tc, "x", x)
    call SetHandleReal(tc, "y", y)
    call SetHandleReal(tc, "facing", facing)
    call SetHandleString(tc, "path", path)
    return tc
endfunction


Пример:
Это ремейк старой карты. Сверху падают бесчисленные бомбы, ваша задача сбивать их выстрелами ракет, нажимая на их изображение на земле.
скачать

Тракэйблы в мультиплеере.
Существует распростроненное мнение что тракэйблы не работают в мультиплеере. Это неверно. Тракэйблы превосходно работают как в сингле так и в мультиплеере, никоим образом не десинхронизируя при этом игру. Проблема в том что нет способа определить какой игрок выделил тракэйбл. Выход в такой ситуации только один - создавать для каждого игрока свой набор тракэйблов.
(именно поэтому в инвентаре димона, в начальных версиях была оговорка о необходимости выделения достаточного места под область с инвом - представьте если играют 12 человек и для каждого необходимо создать свой набор тракэйблов ;) примечание Avatar )

Код:
// внешне t1 и t2 одна и та же тракебля но  де факто один тракэйбл соответствует 1 игроку, а второй другому
    local trackable t1 // Тракэйбл Игрока 1
    local trackable t2 // Тракэйбл Игрока 2
    local string peasant = "units\\human\\Peasant\\Peasant.mdl"
    local string invisible = ""
    local string path = invisible

    if ( GetLocalPlayer() == Player(0) ) then
        set path = peasant
    endif
    set t1 = CreateTrackable(path, -500, 0, 0)

    set path = invisible
    if ( GetLocalPlayer() == Player(1) ) then
        set path = peasant
    endif
    set t2 = CreateTrackable(path, -500, 0, 0)

    call SetHandleInt(t1, "player", 0) // запись игрока "владеющего" этим тракэйблом
    call SetHandleInt(t2, "player", 1) // то же для 2-го игрока

то что описано выше дает вам возможность определить игрока активирующего тракэйбл считав локальную переменную типа integer с именем "Player" во время выбора игроком тракебла.

Если есть желание, можете создать новый тракэйбл(что бы не перепутать чего ненароком:) прим. Avatar)

Код:
function GetTrackableOwner takes trackable t returns player
    return Player(GetHandleInt(t, "player"))
endfunction

function NewTrackable takes string path, real x, real y, real facing, player owner returns trackable
    local trackable tc
    local string invisible = ""
    if GetLocalPlayer() != owner then
        set path = invisible
    endif
    set tc = CreateTrackable(path, x, y, facing)
    call SetHandleReal(tc, "x", x)
    call SetHandleReal(tc, "y", y)
    call SetHandleReal(tc, "facing", facing)
    call SetHandleString(tc, "path", path)
    call SetHandleInt(tc, "player", GetPlayerId(owner))
    return tc
endfunction


Установка высоты моделей-тракэйблов.
Несмотря на то что установка высоты невозможна по определению native функций тракэйблов, у нас есть таки возможность сделать это путем простой работы с их окружением.

Код:
function CreateTrackableZ takes string path, real x, real y, real z, real face returns trackable
    local destructable d = CreateDestructableZ( 'OTip', x, y, z, 0.00, 1, 0 )
    local trackable tr = CreateTrackable( path, x, y, face )
    call RemoveDestructable( d )
    set d = null
    return tr
endfunction

Как это работает: на нужной высоте создается невидимая платформа, затем создается тракэйбл, оказывающийся на платформе. Кроме того, даже после удаления платформы, он все равно остается на нужной нам высоте.

Отсюда на основе предыдущего кода имеем:

Код:
function NewTrackable takes string path, real x, real y, real z, real facing, player owner returns trackable
    local trackable tc
    local string invisible = ""
    local destructable d = CreateDestructableZ( 'OTip', x, y, z, 0.00, 1.00, 0 )
    if GetLocalPlayer() != owner then
        set path = invisible
    endif
    set tc = CreateTrackable(path, x, y, facing)
    call RemoveDestructable( d )
    set d = null
    call SetHandleReal(tc, "x", x)
    call SetHandleReal(tc, "y", y)
    call SetHandleReal(tc, "z", z)
    call SetHandleReal(tc, "facing", facing)
    call SetHandleString(tc, "path", path)
    call SetHandleInt(tc, "player", GetPlayerId(owner))
    return tc
endfunction


Вот собственно и все. Вольный перевод сделал Avatar
Прикрепленные файлы
Тип файла: w3x Bombs.w3x (33.0 Кбайт, 327 просмотров )

Отредактировано Avatar, 02.01.2007 в 18:48.
Старый 01.01.2007, 02:04
Q

offline
Опыт: 360,164
Активность:
плз если переводишь то делай это нормально а не в падонкаффском стиле
Старый 01.01.2007, 02:12
Aspid

offline
Опыт: 8,361
Активность:
Q ок. первый раз просто перевожу не для себя, поэтому много корявостей.
Старый 01.01.2007, 02:17
ArchWorm
Матрица незалежности
offline
Опыт: 4,675
Активность:
У! Ржунимагу! ТракеБЛЯ!
Задолбали ваши переводы. Свои исследования не могут провести, они чужие переводят. Я предлагаю не давать за переводы опыта, как минимум, потому что это плагийад.
Старый 01.01.2007, 03:44
Aspid

offline
Опыт: 8,361
Активность:
ArchWorm12612
- trackable - почему бы и не прочитать как тракебля? если что-то не нравится предложи свой вариант.
- переводы буржуев плагиатом не считаются.
и третье - мне на опыт пох. переводил для людей а не ради опыта.
Старый 01.01.2007, 03:58
exploder
iOS zealot
offline
Опыт: 19,394
Активность:
Не совсем точный перевеод (вступление вообще разное =)), а так норм...

И еще "трак-ебля" режет ухо как-то... Не находите?

Трэкэйбл, имхо...
Старый 01.01.2007, 14:53
dk

offline
Опыт: 61,843
Активность:
Так давай убираем
Цитата:
падонкаффском стиле

Я тоже придерживаюсь этого варианта exploder
Перевод с укзанием авторства(автор буржуй) это не плагиат, вот если бы он написал статью с аналогичным(точь в точь) содержанием и сказал что автор он, это был бы плагиат(имхо)
Старый 01.01.2007, 18:06
tysch_tysch
Работаем
online
Опыт: отключен
давайте пусть хотяб зибада посмотрит, есть имхо что дофига ошибок
Старый 01.01.2007, 19:17
Aspid

offline
Опыт: 8,361
Активность:
ZlaYa1000 ошибок в переводе? или непосредственно в информационном содержании статьи?
Старый 01.01.2007, 20:17
zibada

offline
Опыт: отключен
переведи хотя бы как "траккабл", что ли...
на сайт в таком виде вешать стыдно, уж пардон.
Старый 01.01.2007, 20:26
adic3x

offline
Опыт: 107,539
Активность:
Интересно интересно...
Цитата:
Сообщение от Avatar
Тракебля
- улыбнул)
Старый 01.01.2007, 20:48
Aspid

offline
Опыт: 8,361
Активность:
Цитата:
на сайт в таком виде вешать стыдно, уж пардон.

ничего лучше предложить не могу. никто не говорит что не так все говрят что "что-то в переводе"
в таком случае оставьте тему плиз, может кому пригодиться.
Старый 01.01.2007, 21:02
exploder
iOS zealot
offline
Опыт: 19,394
Активность:
Цитата:
на сайт в таком виде вешать стыдно, уж пардон.

Наверно имелось ввиду с "тракеблями"...
Старый 01.01.2007, 21:22
NECros88

offline
Опыт: 15,951
Активность:
Avatar просмотри ещё раз всю статью и пеерведи на РУССКИЙ, тогда выложат на сайт и дадут опыт =)
Старый 01.01.2007, 21:35
Aspid

offline
Опыт: 8,361
Активность:
Цитата:
Avatar просмотри ещё раз всю статью и пеерведи на РУССКИЙ, тогда выложат на сайт и дадут опыт =)

а нунаф как будто заниматься мне больше нечем.=) если у кого-то возникают нездоровые ассоциации со словом тракебля тут уж медецина бессильна. ну ладно допустим я заменю на как там ! сказал.."траккабл"
Цитата:
Это относится к тракеблям активированых событием TrackableHitEvent

как прикажете это просклонять? "это относится к траккеблам активированых...etc"
и чем это лучше тракеблей? вообщем извините товарищи но мое имхо пургу вы гоните. и заниматься извращениями над транслитом я не собираюсь. ведь транслит он и есть ТРАНСЛИТ, то есть переписка на родной язык непереводимого слова/словосочетания в такой транскрипции которая ближе переводчику.
мое ИМХО.
Старый 01.01.2007, 21:52
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
Avatar, транслит это когда русский язык латинскими (к примеру) буквами. А когда английское слово русскими буквами в таком виде это безграмотность. Для примера - просклоняй "шоссе". Или "пальто".
Цитата:
Это относится к группе трэкэйбл, активированых событием TrackableHitEvent

Варианты написания: Трак-, Трэк-, -э-, -а-, -(й)-, -бл, раз уж такие вопросы :)

FellGuard добавил:
В твоих интересах не спорить, ибо претензии вполне обоснованы.
Старый 01.01.2007, 22:32
S

offline
Опыт: 43,833
Активность:
Хорошая статья, большое спасибо.
Забыл - +10 по 10 балльной шкале
Старый 02.01.2007, 15:35
Aspid

offline
Опыт: 8,361
Активность:
решил прислушаться к мнению экспа и фелла
поправил статью.

Avatar добавил:
Как видно заменил тракебли на тракэйблы

Avatar добавил:
если есть что еще говорите сразу, чтобы у меня была возможность обмозговать.
Старый 02.01.2007, 18:51
adic3x

offline
Опыт: 107,539
Активность:
Avatar, совсем другое дело... На сайт!)
Старый 02.01.2007, 20:08
Aspid

offline
Опыт: 8,361
Активность:
Хмм ну поправил и все дружно замолчали=) скажите хоть что-нибудь ;)
Старый 03.01.2007, 21:09

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

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

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

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



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