Сейчас 11:32:21 Суббота, 20 апреля, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 2 из 2
  • «
  • 1
  • 2
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » Раздел картостроителя » [СТАТЬЯ]Теория скриптописания на языке Jass. (Большущая!)
[СТАТЬЯ]Теория скриптописания на языке Jass.
SirNikolasДата: Вторник, 31 Января 2012, 13:57:51 | Сообщение # 26
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Нет, так просто все не получится. Чтобы точно узнать, утечна ли функция, нужно отключить ВСЕ триггеры на карте и запускать только ее. Есть ведь вполне нормальные триггеры, которые, например, создают крипов на линии, или дамми для заклинаний.

 

AjaccioДата: Вторник, 31 Января 2012, 13:58:45 | Сообщение # 27
7 уровень
Группа: Проверенные
Сообщений: 299
Награды: 1
Репутация: 239
Блокировки:
Вот в простейшем виде. Разница с начальной цифрой - количество созданных, но не уничтоженных объектов.
Это не обязательно утечка, если на карте 200 юнитов, то и число будет примерно 200, главное чтобы оно не росло.
Ну или росло только на время, а потом возвращалось к обычному значению.


XOR EAX, EAX
MOV EAX, 00H ;; NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.
 

ПозитронычДата: Понедельник, 06 Февраля 2012, 19:19:58 | Сообщение # 28
2 уровень
Группа: Пользователи
Сообщений: 32
Награды: 0
Репутация: 0
Блокировки:
А если это число становится отрицательным?
Получается,что удаляется больше, чем создаётся...)
 

AjaccioДата: Понедельник, 06 Февраля 2012, 19:45:25 | Сообщение # 29
7 уровень
Группа: Проверенные
Сообщений: 299
Награды: 1
Репутация: 239
Блокировки:
Это объяснимо, просто таблица хэндлов изначально имеет примерно такой вид:

|..(разные объекты на карте)..|мой таймер, хэндл которого я взял за 0|..(новые объекты)..|

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

|..(разные объекты на карте)..|пустота|..(разные объекты на карте)..|мой таймер, хэндл которого я взял за 0|..(новые объекты)..|

Поэтому локация, которую я использую для определения числа созданных хэндлов, может быть определена в это место:

|..(разные объекты на карте)..|моя локация|..(разные объекты на карте)..|мой таймер, хэндл которого я взял за 0|..(новые объекты)..|

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


XOR EAX, EAX
MOV EAX, 00H ;; NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.
 

ПозитронычДата: Вторник, 07 Февраля 2012, 18:58:25 | Сообщение # 30
2 уровень
Группа: Пользователи
Сообщений: 32
Награды: 0
Репутация: 0
Блокировки:
Получается, само по себе появление отрицательного числа не свидетельствует о наличии утечных объектов?

Добавлено (07 Февраль 2012, 18:58:25)
---------------------------------------------
"

Code

local boolexpr f = Condition(function MyFunc)  
  call GroupEnumUnitsInRange(group, x, y, r, f)


Здесь мы просто собираем юнитов в группу, но согласно условию MyFunc. Иначе говоря, Warcraft перебирает всех юнитов на расстоянии r от точки (x; y), для каждого запускает функцию f и, если она вернёт true, то группа увеличивается на одного юнита. Также можно писать так:

Code

call GroupEnumUnitsInRange(group, x, y, r, Condition(function MyFunc))
"
А можно вместо функции написать какое-нибудь условие,например, call GroupEnumUnitsInRange(group, x, y, r, Condition(1==1)) ?
 

SirNikolasДата: Вторник, 07 Февраля 2012, 19:00:14 | Сообщение # 31
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Quote (Позитроныч)
call GroupEnumUnitsInRange(group, x, y, r, Condition(function MyFunc))
conditionfunc лучше удалять через DestroyBoolexpr(...).
Quote (Позитроныч)
call GroupEnumUnitsInRange(group, x, y, r, Condition(1==1))
Нельзя.


 

Форум о Warcraft 3 » Раздел для картостроителей » Раздел картостроителя » [СТАТЬЯ]Теория скриптописания на языке Jass. (Большущая!)
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz