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

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

Закрытая тема
 
adic3x

offline
Опыт: 108,439
Активность:
=) єта функция что то вроде РунТригер(почти аналог) только запускает функцию по имени.

ADOLF добавил:
а также запускает ее в отдельном потоке (иногда очень удобно).
Старый 27.06.2007, 12:25
J
expert
offline
Опыт: 48,447
Активность:
DFlyer эта функция котрая принимает строку - название другой функции.
И запускает ее в новом потоке. Запускать она ее может даже если оно находится выше или ниже нее
Однако если имя функции окажется неправельным (несуществующим), то вар раскрошится...
Старый 27.06.2007, 12:27
DFlyer
<3 MJ
offline
Опыт: 42,879
Активность:
Допустим есть функция:
Код:
function someFunc takes real X, real Y returns nothing
... some actions ...
endfunction


Тогда можно вызвать так:
Код:
либо call someFunc(1.00,100.00)
либо ExecuteFunc(someFunc)


Я правильно понимаю? И как тогда будет выполняться фунция без передачи ей аргументов, если она изначально их имеет (real X,Y)?
Старый 27.06.2007, 12:33
adic3x

offline
Опыт: 108,439
Активность:
вот я только неуверен, кажется функция которая берет аргументя не особо вызывается через ексекуд (если в ФорГруп задать функцию берущую аргументы - фатал еррор)
Старый 27.06.2007, 12:35
J
expert
offline
Опыт: 48,447
Активность:
DFlyer, можно сделать так:
Код:
function Func2 takes nothing returns nothing
    call ExecuteFunc("Func1")
endfunction

function Func1 takes nothing returns nothing
    //Действия
endfunction
а вот так сделать неполучится
Код:
function Func2 takes nothing returns nothing
    call Func1()
endfunction

function Func1 takes nothing returns nothing
    //Действия
endfunction


Jon добавил:
однако прелесть этой функции еще и в создании нового потока, это имеет очень большое значение...
Старый 27.06.2007, 12:39
DFlyer
<3 MJ
offline
Опыт: 42,879
Активность:
Код:
function Func2 takes nothing returns nothing
  call ExecuteFunc("Func1")
endfunction

function Func1 takes nothing returns nothing
  //Действия
endfunction

А если Func1 имеет аргументы?
Старый 27.06.2007, 12:46
J
expert
offline
Опыт: 48,447
Активность:
DFlyer выкинет из игры с ошибкой в момент исполнения call ExecuteFunc("Func1"), однако ExecuteFunc() можно вызывать функции которые возвращают значения, однако возвращаемое значение ты не уловиш, но просто можно... из игры не викинет...
Старый 27.06.2007, 12:48
FausT

offline
Опыт: 1,451
Активность:
Ну она может вызивать функцию которая takes unit ??
Код:
function SetIcon takes unit u returns nothing
 set.....
endfunction

Код:
function Func1 takes nothing returns nothing
  call ExecuteFunc("Func1")(GetTrigerUnit)
endfunction

Можете сказать как вызвать функцию с другого триггера, которая takes unit ??
Старый 27.06.2007, 13:08
J
expert
offline
Опыт: 48,447
Активность:
Цитата:
Сообщение от FausT
Ну она может вызивать функцию которая takes unit

Цитата:
Сообщение от jon
выкинет из игры с ошибкой в момент исполнения call ExecuteFunc()

а это непонял:
Цитата:
Сообщение от FausT
Можете сказать как вызвать функцию с другого триггера, которая takes unit ??
Старый 27.06.2007, 13:10
FausT

offline
Опыт: 1,451
Активность:
Код:
1 тригер
С: Юнит зашел в регион
Д: call seticon(GetEnterUnit)



Код:
2 тригер
function 2тригер_actions takes nothing returns nothing
....
endfunction

function SetIcon takes unit u returns nothing
set...
endfunction

InitTig ...
set 2 ____ = create trig


Тоько если ето сделать у ВЕ будет писать ошыбку =((
Старый 27.06.2007, 13:18
J
expert
offline
Опыт: 48,447
Активность:
а... наверно понял.. у тебя тригер который берет юнита участвующего в событие... а тебе надо выполнить этот тригер, включа нужного тебе юнита в него? или неверно нет... ниче не понял:):
Старый 27.06.2007, 13:20
FausT

offline
Опыт: 1,451
Активность:
ну короче сейчас расскажу по пунктам
  1. У меня 2 тригера
  2. Первый тригер находит юнита
  3. Первый тригер вызивает функцию
  4. Ета функция лежит в другом тригере
  5. Ета функция takes unit
И мне нужно вызвать ету функцию, но когда я ето делаю Ве выписывает Error!!!
Старый 27.06.2007, 13:42
DFlyer
<3 MJ
offline
Опыт: 42,879
Активность:
FausT
Напиши точно как ты делаешь. Без всяких сокращений и т.д.
Старый 27.06.2007, 14:17
exAres
I love magic :)
offline
Опыт: 7,788
Активность:
FausT в варе есть такая весчь как "последовательность" функций т.е. триггер с той функцией которую ты вызываешь должен находится выше чем триггер из которого ты её вызываешь + ВЕ ругается если эти(из разных триггеров) функции не "зарегестрированы" им(карта не сохранялась эдитором после появления функций), для этого, после прописания нужного кода вместо "Сохранить" жмёшь "Закрыть карту" и когда вылезает диалог типа "Хотите ли вы сохранить карту ?" жмёшь "да", после сохранения и закрытия опять открываешь карту и потом она должна нормально сохранятся, ну конечно если ты что-нить не напутаешь.
Старый 27.06.2007, 14:26
FausT

offline
Опыт: 1,451
Активность:
MrSmiLe вечером посмотрю. Если даже не получецца все равно спасиба.
DFlyer что действительно не понятно? Так уже описал что ето вообще...
Старый 27.06.2007, 14:34
DFlyer
<3 MJ
offline
Опыт: 42,879
Активность:
FausT
Ну напиши не "по пунктам, что надо", а выложи триггер, чё ты хочешь сделать.
Цитата:
когда я ето делаю Ве выписывает Error!!!

И напиши ещё, какую именно ошибку выдаёт ВЕ.
Старый 27.06.2007, 15:09
J
expert
offline
Опыт: 48,447
Активность:
FausT ну вроде все понятно... дело в том, что функции обьявляются последовательно, поэтому ты не можеш вызывать функцию1 из функции2, если функция1 обьевлятся поже функции2, когда ты создаеш триггер то функции находящиеся в нем, помещаются в самый конец списка объявлений, т.е. в процесе создания триггеров человеком, все зависит не от того как триггеры размещаются в списке, а кто из них когды был создан.
ты можеш выйти из редактора, сохранится по ходу, и снова загрузить карту, WE автомотически обновляет список обновления с соответствием порятку тригеров в списке... вроде так...
Старый 27.06.2007, 15:19
PlayerDark
Coraline
offline
Опыт: 10,569
Активность:
Ну что это за функция pick every unit ... чтобы ее использовать нужно создавать 3 функции ... ппц. Нельзя ли пикать юнитов попроще ?
Старый 27.06.2007, 21:11
J
expert
offline
Опыт: 48,447
Активность:
можно конешно
Код:
local group gr = CreateGroup()
local unit u
//Сдесь включай нужных тебе юнтов в группу
//Например с помощью функции call GroupEnumUnitsInRange (gr, X, Y, радиус, Фильтр функция), хотя Можно и иначе
call GroupEnumUnitsInRange (gr, 0, 0, 200, null )
    loop
        set u = FirstOfGroup(gr)
        exitwhen u == null
        //Твои действия над юнитом "u"
        call GroupRemoveUnit (gr, u)
    endloop
call DestroyGroup(gr)
Старый 27.06.2007, 21:19
PlayerDark
Coraline
offline
Опыт: 10,569
Активность:
Jon ок.

PlayerDark добавил:
Код:
local group gr = CreateGroup()
local unit u
//Сдесь включай нужных тебе юнтов в группу
//Например с помощью функции call GroupEnumUnitsInRange (gr, X, Y, радиус, Фильтр функция), хотя Можно и иначе
call GroupEnumUnitsInRange (gr, 0, 0, 200, null )
    loop
        set u = FirstOfGroup(gr)
        exitwhen u == null
         if ppp == ppp then
        //Твои действия над юнитом "u"
         endif
        call GroupRemoveUnit (gr, u)
    endloop
call DestroyGroup(gr)


Вот эта конструкция у мене не работает. А без иф-ов работает.

PlayerDark добавил:
Примерно такая - главное вот это условие.
Старый 28.06.2007, 11:09
Закрытая тема

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

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

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

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



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