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

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

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

offline
Опыт: 54,313
Активность:
Цитата:
Для одного набора массивов - да.
В vJass можно увеличить эту величину (точно не помню максимальное значение, но, вроде бы, вплоть до 40000):
но при этом обращение к элементам происходит через функции... тем самым это уже не массивы =)
Старый 30.07.2008, 19:33
alexkill

offline
Опыт: 18,872
Активность:
А как работает вот эта конструкция?

Код:
private struct YYY
    unit Caster
    integer Level
    real Speed
 
      static method create takes unit u, integer level, real speed returns YYY
        local YYY n = YYY.allocate()
        set n.Caster = u
        set n.Speed = speed
        set n.Level = level
        return n
      endmethod
 
endstruct


Это считается структурой или как?
Старый 31.07.2008, 12:35
J
expert
offline
Опыт: 48,447
Активность:
а почему должна не считатся?
Старый 31.07.2008, 12:46
alexkill

offline
Опыт: 18,872
Активность:
Jon'ик, я о том, что не нужно создавать глобалок-массивов в этом случае. И кэш не используется. Я прав?
Старый 31.07.2008, 12:49
ScorpioT1000
Работаем
online
Опыт: отключен
Ну да, она и так создает их

ScorpioT1000 добавил:
при выходе
Старый 31.07.2008, 12:57
Toadcop

offline
Опыт: 54,313
Активность:
ну здесь ограничение на 8190 елементов =)

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

Toadcop добавил:
т.е. я объясню истиный смысл vJass =) он заключалса в том что бы действительно добавить удобные и важные фичи как декларацию глобалок. ну и структуры... а остальное это развлечения для вексориана с побочной "пользой" =)
Старый 31.07.2008, 13:08
alexkill

offline
Опыт: 18,872
Активность:
Toadcop, читаю написанное тобой (ты противоречишь сам себе, что ли, не пойму? =) По теме: это лучше кэша или нет?

А при юзании последнего есть ограничения? Если это ассоциативный массив, то те же 8190?
Старый 31.07.2008, 13:49
Toadcop

offline
Опыт: 54,313
Активность:
alexkill меня тема темы не интересует здесь всё очевидно.

а это... "а что такое структура ?" // это вопрос. вообще меня убивает то что люди юзают то что незнаю что это такое. впринцыпе в какой то мере вексориан мудаг =) ну это его проблемы.
Старый 31.07.2008, 15:04
adic3x

offline
Опыт: 108,439
Активность:
Цитата:
т.е. я объясню истиный смысл vJass =) он заключалса в том что бы действительно добавить удобные и важные фичи как декларацию глобалок. ну и структуры...


аллокатор и деструктор (без проверки на 8190, т.е. быстрее чВ) - копипаст 15 строк кода

ну еще макросы куда не шли, а остальное из серии "а посмотрите как мы круто сделали то что мы могли сделать легче и проще, но решили сделать это так и теперь убеждаем всех что это круто"
Старый 31.07.2008, 18:47
Toadcop

offline
Опыт: 54,313
Активность:
ADOLF в структурах фичя в синтаксесе... который сильно экономит размер кода.
Старый 31.07.2008, 20:37
adic3x

offline
Опыт: 108,439
Активность:
Цитата:
который сильно экономит размер кода

сурс кода...

ну вообще более или менее, но впринципе на любителя)
Старый 31.07.2008, 21:16
Toadcop

offline
Опыт: 54,313
Активность:
ADOLF если тебя волнует размер сурс кода то кастрируй его тулами там всякими...
Старый 31.07.2008, 22:22
ScorpioT1000
Работаем
online
Опыт: отключен
А че о конечном-то волноваться, лишние 0.1 сек загрузки?

ScorpioT1000 добавил:
Цитата:
По теме: это лучше кэша или нет?

Кароче примерно так: если те надо делать экшн с хорошей реакцией и кучей эвентов - юзай кэш на минимуме.
А если рпг или страту - и кэш сойдет
Старый 01.08.2008, 00:32
adic3x

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

причем это к сурс коду?!

Цитата:
если тебя волнует размер сурс кода то кастрируй его тулами там всякими

я и говорю что это влияет только на .вцт (не .дж)
Старый 01.08.2008, 16:30
Toadcop

offline
Опыт: 54,313
Активность:
ADOLF да ? а то что я сейчас перну повлияет на то что в японие будет землетресение 0.00000000000000000000000000000000000000000000000000000000000001 силы. и ?

// неочём короче ты что карту для кода делаеш что ли ?
Старый 01.08.2008, 18:46
alexkill

offline
Опыт: 18,872
Активность:
По вполне объяснимым причинам vJass я использовать не могу (JNGP работает на ура только лишь до попытки объявить глобалки). Ну да и бог с ним.

Как при помощи структур приаттачить юнита к таймеру (понятно, не используя кэш)?

Вот как это должно выглядеть(грубо говоря):

Код:
function s__cord__allocate takes nothing returns integer
 local integer this=udg_si__cord_F
    if (this!=0) then
        set udg_si__cord_F=udg_si__cord_V[this]
    else
        set udg_si__cord_I=udg_si__cord_I+1
        set this=udg_si__cord_I
    endif
    if (this>8190) then
        return 0
    endif

    set udg_si__cord_V[this]=-1
 return this
endfunction

function s__cord_destroy takes integer this returns nothing
    if this==null then
        return
    elseif (udg_si__cord_V[this]!=-1) then
        return
    endif
    set udg_si__cord_V[this]=udg_si__cord_F
    set udg_si__cord_F=this
endfunction

function Go takes nothing returns nothing
// че нужно сделать здесь, чтоб совершить действо над приаттаченным юнитом?
endfunction

function Time takes nothing returns nothing
   local integer A=s__cord__allocate()
// и здесь, чтоб его аттачить?
   call TimerStart(CreateTimer(),3,false,function Go)
   call s__cord_destroy(A)
endfunction
Старый 07.08.2008, 11:33
ShadoW DaemoN

offline
Опыт: 37,078
Активность:
alexkill, можно использовать хэш-функцию для получения индекса массива и считывать/записывать данные через него.
Также можно использовать цикл по структурам без аттача:
Код:
function onTimer takes nothing returns nothing
  local integer i = 0
  local proj p = 0
  loop
    set i = i + 1
    // proj.index - макс. индекс занятого элемента в массиве
    exitwhen i > proj.index
    set p = proj(i)
    // действия с p
    set p.x = p.x + 1
    set p.y = p.y + 1
  endloop
endfunction

На обычном jass это выглядит приблизительно так:
Код:
function onTimer takes nothing returns nothing
  local integer i = 0
  local integer p = 0
  loop
    set i = i + 1
    // p_index - макс. индекс занятого элемента в массиве
    exitwhen i > p_index
    // действия с p
    set p_x[i] = p_x[i] + 1
    set p_y[i] = p_y[i] + 1
  endloop
endfunction
Старый 07.08.2008, 11:57
alexkill

offline
Опыт: 18,872
Активность:
ShadoW DaemoN, уникальный индекс у меня в функции определяется (локалка А). То есть здесь вполне уместным было бы приаттачить к таймеру этот ключ и обойтись одним обращением к кэшу.

А насчет цикла - не совсем понял (совсем не понял?=) ) На моем примере можешь пояснить (том, что в первом посте темы)?
Старый 07.08.2008, 12:29
Toadcop

offline
Опыт: 54,313
Активность:
цыклы зло =) они не нужны в таких системах ВООБЩЕ. =)
Старый 07.08.2008, 14:33
ShadoW DaemoN

offline
Опыт: 37,078
Активность:
alexkill, насчет цикла забыл сказать, что он выполняется 1 таймером, собственно, поэтому там цикл действий... Для информации можешь посмотреть тему "[Task] Движение снарядов #2".
Конкретно в твоем примере все делается элементарно (аттачить не нужно вообще):
Код:
function AlexKill takes nothing returns nothing
  call UnitApplyTimedLife(GetSpellAbilityUnit(), 'BTLF', 5.)
endfunction

Если же нужно что-то приаттачить, можно использовать хэш. Вот простой пример:
Код:
// (tz) is integer array
function Go takes nothing returns nothing
  local timer t = GetExpiredTimer()
  local integer i = tz[H2I(t) - 0x100000]
  call SetUnitX(s__u[i], 0)
  call SetUnitY(s__u[i], 0)
  call s__cord_destroy(i)
  call DestroyTimer(t)
  set t = null
endfunction

function Time takes nothing returns nothing
  local timer t = CreateTimer()
  set tz[H2I(t) - 0x100000] = s__cord__allocate()
  call TimerStart(t, 3., false, function Go)
  set t = null
endfunction
Старый 07.08.2008, 16:00
Закрытая тема

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

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

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

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



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