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

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

Ответ
 
Vampirrr
O_o
offline
Опыт: 19,286
Активность:
Как занести каждого созданного циклом юнита в переменную?
Создаем допустим 10 юнитов циклом от 1 до 10 естественно. Но вот как будут сохраняться юниты в подобном цикле:

Код:
function templet takes nothing returns nothing 
local unit u
local rect loc  
local integer a
set a = 1 

loop 
set a = a+1
exitwhen a == 10
call CreateUnitAtLocSaveLast ( GetTriggerPlayer(), 'hkni', GetRectCenter(loc), bj_UNIT_FACING ) 
set u = GetLastCreatedUnit()

endloop 

endfunction


каждому юниту будет присвоена переменная u, или в переменную запишется только последний созданный юнит?

И в чем разница между:

CreateUnitAtLocSaveLast takes player id, integer unitid, location loc, real face returns unit
и
CreateNUnitsAtLoc takes integer count, integer unitId, player whichPlayer, location loc, real face returns group

я понял что в 1 варианте 1 юнит создается, а в другом определенное количество, но что значит SaveLast - типа последний сохраняется автоматом?

Ах да, для тех кто пишет на джассе - вы используете какую-нить программу для написания, или набираете сами, а потом отступы делаете как вам нравится?)
Старый 30.12.2008, 04:06
Scorched

offline
Опыт: 7,912
Активность:
Vampirrr, создавай по одному: set u[i]=CreateUnit(...)
Старый 30.12.2008, 04:10
Vampirrr
O_o
offline
Опыт: 19,286
Активность:
Код:
function templet takes nothing returns nothing 
local unit array u
local rect loc  
local integer a
set a = 1 

loop 
set a = a+1
exitwhen a == 10

set u[a] = CreateUnitAtLoc( GetTriggerPlayer(), 'hkni', GetRectCenter(loc), bj_UNIT_FACING ) 
 
endloop  
endfunction


Так?
P.S.: ты пожалуйста подробней, если что не так, ибо мои познания в написании кода очень невелики)

Кстати, rect, location и region чем отличаются? а то я в них запутался..

Отредактировано Vampirrr, 30.12.2008 в 04:38.
Старый 30.12.2008, 04:22
RazArt

offline
Опыт: 11,197
Активность:
Vampirrr, да так, но ты юзаеш локальную переменную, то есть после окончания работы триггера их нельзя будет использовать, да и утечки... В конце функции нужно делать так <Имя пеерменной>=null, если энто переменные не типов Integer, Real и Boolean

» Код

Код:
function templet takes nothing returns nothing 
local unit array u
local rect loc  
local integer a
//------
set a = 1 
loop 
exitwhen a == 10
set u[a] = CreateUnitAtLoc( GetTriggerPlayer(), 'hkni', GetRectCenter(loc), bj_UNIT_FACING ) 
set a = a+1
endloop  
//------
set a = 1
loop 
exitwhen a == 10
set u[a]=null
set a = a+1
endloop
//------
set loc=null
endfunction

Старый 30.12.2008, 08:38
Vampirrr
O_o
offline
Опыт: 19,286
Активность:
RazArt, благодарю)
Старый 30.12.2008, 09:23
RealInt

offline
Опыт: 151
Активность:
Цитата:
Сообщение от Vampirrr
И в чем разница между:

CreateUnitAtLocSaveLast takes player id, integer unitid, location loc, real face returns unit
и
CreateNUnitsAtLoc takes integer count, integer unitId, player whichPlayer, location loc, real face returns group

я понял что в 1 варианте 1 юнит создается, а в другом определенное количество, но что значит SaveLast - типа последний сохраняется автоматом?


Разница в том что первая функция - БЖ, она кроме того что создает юнита, еще и заносит его в переменную bj_lastCreatedUnit
Код:
function CreateUnitAtLocSaveLast takes player id, integer unitid, location loc, real face returns unit
    if (unitid == 'ugol') then
        set bj_lastCreatedUnit = CreateBlightedGoldmine(id, GetLocationX(loc), GetLocationY(loc), face)
    else
        set bj_lastCreatedUnit = CreateUnitAtLoc(id, unitid, loc, face)
    endif

    return bj_lastCreatedUnit
endfunction


Вообще в таких случаях лучше всего смотреть значение функции в Jass API, там имхо все подробно описано.
Старый 30.12.2008, 11:04
RazArt

offline
Опыт: 11,197
Активность:
Цитата:
Сообщение от RealInt
Вообще в таких случаях лучше всего смотреть значение функции в Jass API, там имхо все подробно описано

Можно подробнее, что за Jass API и где его взять? Я просто сам новичёк)
Старый 30.12.2008, 11:10
Scorched

offline
Опыт: 7,912
Активность:
Цитата:
local integer a
set a = 1

заменить на
local integer a=1
Цитата:
Кстати, rect, location и region чем отличаются? а то я в них запутался..

rect - это гуишный регион, location - точка, а region - регион сложной формы.
Цитата:
Вообще в таких случаях лучше всего смотреть значение функции в Jass API

там нет ничего интересного, кроме сортировки по типам и раскрашенности. значение функции bj дано в blizzard.j

Scorched добавил:
Цитата:
bj_UNIT_FACING

эту шнягу лучше заменить на численный угол поворота, например 0
Цитата:
GetRectCenter(loc)

можно заменить на loc, если ты объявишь loc как location
и кстати у тебя не присвоено никакого значения loc'у, юниты будут создаваться хз где
Старый 30.12.2008, 13:56
ELDAR
НИИ 4А-ВО кафедра SPELLS
offline
Опыт: 8,394
Активность:
» For RazArt
RazArt я скачал JassColler а там есть два блокнота common.j и blizzard.j в них есть все функции

Цитата:
Ах да, для тех кто пишет на джассе - вы используете какую-нить программу для написания, или набираете сами, а потом отступы делаете как вам нравится?)

пишу сам отступы нужны только чтобы не забыть все закрыть
Код:
function templet takes nothing returns nothing 
local unit array u
local rect loc  = null
local integer a = 0
//------
loop 
set a = a+1
set u[a] = CreateUnitAtLoc( GetTriggerPlayer(), 'hkni', GetRectCenter(loc), 270 ) 
exitwhen a == 10
endloop  
//------
set a = 0
loop 
set a = a+1
set u[a]=null
exitwhen a == 10
endloop
//------
set loc=null
endfunction

вот в этом случае создастся 10 юнитов.
вот вопрос зачем rect када мона юзать location?

Отредактировано ELDAR, 30.12.2008 в 14:04.
Старый 30.12.2008, 13:58
PlayerDark
Coraline
offline
Опыт: 10,569
Активность:
Отступы улучшают читаемость кода, для написания скриптов я юзаю JassCraft.
Старый 30.12.2008, 15:17
Scorched

offline
Опыт: 7,912
Активность:
Цитата:
Сообщение от ELDAR
вот в этом случае создастся 10 юнитов.

где они создадутся, если loc==null?
Старый 30.12.2008, 15:30
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
Scorched, не создадутся. Автор имел ввиду, что надо задать переменную.
Старый 30.12.2008, 15:43
ELDAR
НИИ 4А-ВО кафедра SPELLS
offline
Опыт: 8,394
Активность:
Scorched а вот эти символы тебе не очем не говорят?
"//------"
Тут должо быть еще что нибудь?
Старый 30.12.2008, 16:41
Scorched

offline
Опыт: 7,912
Активность:
Цитата:
Сообщение от ELDAR
Scorched а вот эти символы тебе не очем не говорят?
"//------"
Тут должо быть еще что нибудь?

ну, извини, не заметил твою морзянку. тут должны быть нормальные комментарии, если уж на то пошло =)
Старый 30.12.2008, 17:34
Vampirrr
O_o
offline
Опыт: 19,286
Активность:
RazArt,

Цитата:
Можно подробнее, что за Jass API и где его взять? Я просто сам новичёк)


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

ELDAR,

Цитата:
а region - регион сложной формы


насколько сложной? допустим я могу задать региону форму звезды 5-ти конечной? если да, то как?

Кстати, еще вопрос - вот допустим у меня действие - создать юнита в ректе. Но у меня такого ректа не существует, то юнит создастся в центре карты..можно ли обойти это без проверок на наличие этого ректа в карте?
Старый 30.12.2008, 20:54
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
Vampirrr, он у тебя не должен создасться вообще по идее... Т.к. вылетит ошибка. А JASS API лучше в генпаке смотреть.
Старый 30.12.2008, 21:03
Vampirrr
O_o
offline
Опыт: 19,286
Активность:
Hellfim, а у меня не вылетает O_o у меня действие было - цикл от 1 до 10 - создать юнит в регионе (массив до 5), таким образом создавались 5 юнитов в регионах, а 5 в центре карты)) и никаких ошибок)
Старый 30.12.2008, 21:07
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
Vampirrr, ну массив это другой вопрос, я думал ты пишешь gg_rct_lalala
Старый 30.12.2008, 21:08
Vampirrr
O_o
offline
Опыт: 19,286
Активность:
Hellfim, нье, именно массив..
Старый 30.12.2008, 21:16
PlayerDark
Coraline
offline
Опыт: 10,569
Активность:
region - группа ректов, регионы по сути являются наборами ректов.
Старый 31.12.2008, 06:48
Ответ

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

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

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

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



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