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

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

Закрытая тема
 
Enein
Silenced by ZlaYa1000
offline
Опыт: 43,453
Активность:
Более оптимальный вариант
Подскажите, как лучше задавать иконку в м-борде, если n будет больше 50:
» Вариант 1
Код:
function SetIcons takes nothing returns nothing
    local integer i=1
    local string array s
    set s[1]="ReplaceableTextures\CommandButtons\BTNHeroTinker.blp"
    set s[2]="ReplaceableTextures\CommandButtons\BTNKnight.blp"
...
    set s[n]="ReplaceableTextures\CommandButtons\BTNHeroPaladin.blp"
...
    loop
        exitwhen i=AmountHeroes // AmountHeroes - мое кол-во героев
            if GetUnitTypeId(GetTriggerUnit())==udg_HeroType[i] then 
                call MultiboardSetItemIconBJ(udg_Multiboard, 1, ( udg_playerrow[GetConvertedPlayerId(GetOwningPlayer(GetTriggerUnit()))] + 1 ),s[i])
            endif
        set i=i+1
    endloop
...
endfunction

» Вариант 2
Код:
function SetIcons takes nothing returns nothing
    local integer i=1
    local string array s
    local string sconst = "ReplaceableTextures\CommandButtons\"
    set s[1]="BTNHeroTinker.blp"
    set s[2]="BTNKnight.blp"
...
    set s[n]="BTNHeroPaladin.blp"
...
    loop
        exitwhen i=AmountHeroes // AmountHeroes - мое кол-во героев
            if GetUnitTypeId(GetTriggerUnit())==udg_HeroType[i] then 
                call MultiboardSetItemIconBJ(udg_Multiboard, 1, ( udg_playerrow[GetConvertedPlayerId(GetOwningPlayer(GetTriggerUnit()))] + 1 ),sconst+s[i])
            endif
        set i=i+1
    endloop
...
endfunction

Отредактировано Flareon, 25.12.2008 в 23:57.
Старый 25.12.2008, 23:52
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
Flareon, второй.
Старый 25.12.2008, 23:54
Toadcop

offline
Опыт: 54,313
Активность:
неодин... запись в массив надо вынести в отдельную функцию которая будет ДО этого запускатьса а потмо просто читать...

Код:
function SetIcons takes nothing returns nothing
    local integer i=1

    loop
        exitwhen i=AmountHeroes // AmountHeroes - мое кол-во героев
            if GetUnitTypeId(GetTriggerUnit())==udg_HeroType[i] then 
                call MultiboardSetItemIconBJ(udg_Multiboard, 1, ( udg_playerrow[GetConvertedPlayerId(GetOwningPlayer(GetTriggerUnit()))] + 1 ),sconst+s[i])
            endif
        set i=i+1
    endloop
...
endfunction

function InitIcons takes nothing returns nothing
    set s[1]="ReplaceableTextures\CommandButtons\BTNHeroTinker.blp"
    set s[2]="ReplaceableTextures\CommandButtons\BTNKnight.blp"
...
    set s[n]="ReplaceableTextures\CommandButtons\BTNHeroPaladin.blp"
...
endfunction


грубо говоря...
это я поверхностно дал совет еще =)
Старый 26.12.2008, 00:28
Dragon Knight
Меткий стрелок!!!
offline
Опыт: 4,138
Активность:
Toadcop ну это не обязательно, т.к. используется при выборе героя
Старый 26.12.2008, 01:06
Toadcop

offline
Опыт: 54,313
Активность:
ну а иначе ясно что лутче НЕ клеит строки а иммено целу строку использовать... т.е. вариант 1 типо...
Старый 26.12.2008, 02:26
J
expert
offline
Опыт: 48,447
Активность:
и убрать BJ функцию мультиборда
Старый 26.12.2008, 04:36
Enein
Silenced by ZlaYa1000
offline
Опыт: 43,453
Активность:
Цитата:
и убрать BJ функцию мультиборда

как, если не секрет? и чем БЖ так плохи, что вы от них всегда пытаетесь избавиться?
Старый 26.12.2008, 10:59
alexkill

offline
Опыт: 18,872
Активность:
Цитата:
Сообщение от Flareon
как, если не секрет?


раскрой содержание функции в JNGP и скопируй код

Цитата:
Сообщение от Flareon
и чем БЖ так плохи, что вы от них всегда пытаетесь избавиться?

лишний вызов функции в лучшем случае, в худшем - утечка (multiboarditem), как в твоем коде
Старый 26.12.2008, 11:13
J
expert
offline
Опыт: 48,447
Активность:
вот как эта BJ функция выглядит
» code
Код:
function MultiboardSetItemIconBJ takes multiboard mb, integer col, integer row, string iconFileName returns nothing
    local integer curRow = 0
    local integer curCol = 0
    local integer numRows = MultiboardGetRowCount(mb)
    local integer numCols = MultiboardGetColumnCount(mb)
    local multiboarditem mbitem = null
    loop
        set curRow = curRow + 1
        exitwhen curRow > numRows
        if (row == 0 or row == curRow) then
            set curCol = 0
            loop
                set curCol = curCol + 1
                exitwhen curCol > numCols
                if (col == 0 or col == curCol) then
                    set mbitem = MultiboardGetItem(mb, curRow - 1, curCol - 1)
                    call MultiboardSetItemIcon(mbitem, iconFileName)
                    call MultiboardReleaseItem(mbitem)
                endif
            endloop
        endif
    endloop
endfunction
а вот что будет если убрать все лишнее
» code
Код:
function MultiboardSetItemIconBJFix takes multiboard mb, integer col, integer row, string iconFileName returns nothing
    local multiboarditem mbitem = MultiboardGetItem(mb, row, col)
    call MultiboardSetItemIcon(mbitem, iconFileName)
    call MultiboardReleaseItem(mbitem)
    set mbitem = null
endfunction

Отредактировано Jon, 26.12.2008 в 17:41.
Старый 26.12.2008, 12:05
PlayerDark
Coraline
offline
Опыт: 10,569
Активность:
Flareon БЖ функции мультибоардов оставляю утечку, что вредно при обновлении мультиборда.
Старый 26.12.2008, 13:25
ShadoW DaemoN

offline
Опыт: 37,078
Активность:
По теме: пиши строки целиком, конкатенацию делать не нужно.

В коде допущены некоторые ошибки, а именно 1 знак равенства вместо двух (в сравнении exitwhen), и в строках не учтены escape-последовательности (т.е. вероятно будет краш) - нужно писать двойные бекслеши при указании путей к ресурсам.

Код:
globals
  string array s
  // . . .
endglobals

// . . .

function MB_SetItemIconX takes multiboard mb, integer col, integer row, string iconFileName returns nothing
  local multiboarditem mbitem = MultiboardGetItem(mb, row, col)
  call MultiboardSetItemIcon(mbitem, iconFileName)
  call MultiboardReleaseItem(mbitem)
  set mbitem = null
endfunction

function SetIcons takes nothing returns nothing
  local integer i = 1
  local integer row = udg_playerrow[GetPlayerId(GetOwningPlayer(GetTriggerUnit())) + 1]
  local integer utype = GetUnitTypeId(GetTriggerUnit())
  loop
    if udg_HeroType[i] == utype then 
      call MB_SetItemIconX(udg_Multiboard, 0, row, s[i])  
    endif
    exitwhen i == AmountHeroes
    set i = i + 1
  endloop
  // . . .
endfunction

function InitIcons takes nothing returns nothing
  set s[1] = "ReplaceableTextures\\CommandButtons\\BTNHeroTinker.blp"
  set s[2] = "ReplaceableTextures\\CommandButtons\\BTNKnight.blp"
  // . .  .
  set s[n] = "ReplaceableTextures\\CommandButtons\\BTNHeroPaladin.blp"
  // . . .
endfunction

Отредактировано ShadoW DaemoN, 27.12.2008 в 18:28.
Старый 26.12.2008, 17:22
Enein
Silenced by ZlaYa1000
offline
Опыт: 43,453
Активность:
Цитата:
раскрой содержание функции в JNGP и скопируй код

я не юзаю jngp, и наверное зря...
Цитата:
В коде допущены некоторые ошибки, а именно 1 знак равенства вместо двух (в сравнении exitwhen)

забыл случайно. в коде карты такого нет
Цитата:
и в строках не учтены escape-последовательности (т.е. вероятно будет краш)

что такое escape-последовательности?
Старый 27.12.2008, 17:20
JimALIEN
вдупляет sc2 editor
offline
Опыт: 7,176
Активность:
ShadoW DaemoN вот не уверен но чтото мне кажеца что этот цикл
Код:
loop
    if udg_HeroType[i] == utype then 
      call MB_SetItemIconX(udg_Multiboard, 0, row, s[i]) 
    endif
    set i = i + 1
    exitwhen i == AmountHeroes
  endloop

при AmountHeroes = 1 (сингл) приведет к зацикливанию или еще хз чему, т.к. на момент первой проверки этого условия i уже будет равно 2, т.е. наверн твердое равенство стоит заменить на ">=". Или я ошибаюсь?=\
Старый 27.12.2008, 18:21
ShadoW DaemoN

offline
Опыт: 37,078
Активность:
JimALIEN, хмм, да, забыл, что нумерация с 1, а не с нуля. Будет превышен оп лимит, если AmountHeroes < 1.

Flareon, что ж вы так не любите JassNewGenPack все?

Escape-последовательность @ Wikipedia
Старый 27.12.2008, 18:34
Enein
Silenced by ZlaYa1000
offline
Опыт: 43,453
Активность:
Цитата:
что ж вы так не любите JassNewGenPack все?

он оставляет за собой в триггерах след в виде каких-то странных двух строчек
Старый 27.12.2008, 22:39
adic3x

offline
Опыт: 108,439
Активность:
Цитата:
он оставляет за собой в триггерах след в виде каких-то странных двух строчек

rofl! ржу нимогу))) это вверху в коментах те что?)

хаха) по идее это позиция скрола и запоминание позиции скрола, т.е. к примеру когда вы работаете с нем, то после перезапуска редактора вы будете просматривать ваш код с той же строки... (т.е. тупо "удобство")
Старый 28.12.2008, 14:56
Закрытая тема

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

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

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

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



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