Сейчас 00:33:37 Понедельник, 29 апреля, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 2 из 2
  • «
  • 1
  • 2
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » Скилл Механика у Тинкера (Апргрейд абилок)
Скилл Механика у Тинкера
FkoFFДата: Пятница, 05 Августа 2011, 19:14:06 | Сообщение # 26
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
Quote (Hexing)
Я думаю ты не имеешь права судить об этом, пока не покажешь открытый код движка варика. В некоторых языках программирования(самых простых) boolean = integer = 4 байта. В норм языках вроде c++ это 1 байт. В delphi(насчет си не знаю) есть возможность создания "упаковок": packed record boolean, тоесть так как у булина 2 значения(аля бинарный код), можно создать суммарность по очень выгодной прогрессии (0-1+ 3-4 +...) и уместить в тех же 4 байтах ну очень большое количество булинов. Я думаю что хоть ты булин хоть интегер создавай, на современных компах это не проблема, един. проблема варика в утечках и только в них.

И к чему весь этот оффтоп? Були перезаписываются, это склярные типы, не являющиеся объектами и не происходят от handle. А ведь именно handle и все его дочерние переменные утечны.

В конце концов если речь о прелоаде - прелоадить надо то, что нагружает память. Були память не нагружают, нагружают память убогие конструкции

function Cond_02 takes nothing returns boolean
if not(YourCond==true) then
return false
else
return true
endif
endfunction

function Cond_03 takes nothing returns boolean
if not(YourCond==true) then
return false
else
return true
endif
endfunction
function Cond_01 takes nothing returns boolean
return And(Cond_02,Cond_03)
endfunction

Из-за таких вот массивных вызовов получается самый настоящий лютый капздец. Я как то делал переключение скиллов на гуи кнопками

Тоесть if Ability=="left arrow" then
if unitcur==one then
if unithas==twoforlearn then
change one to two
else
if unithas==threeforlearn then
change one to three
endif
endif
endif

как то так это все выглядело, только на гуи, и примерно в 40 раз больше, и вот именно тут вся веселуха и заключалась, казалось бы, не оперируется ни одним хэндлом (не создаются объекты), откуда утечки? Вы думаете були или булэкспры? Нет же, проблема в том что каждая функция, возвращавшая буль разветвлялась на две другие, а та еще на две другие. Всего условий было порядка 120. И да, это лагало. Не надо прелоадить були, надо оптимизировать методы.


 

HexingДата: Суббота, 06 Августа 2011, 09:31:12 | Сообщение # 27
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
Проблема эдакого jass движка в том, что реализация "триггеров" или точнее их имитация, требует использование любой функции как виртуальной, а значит меньше условий = быстрее код. Имхо из-за таких вещей можно ваще не париться, есть намного более страшные вещи и мы в 2 уже давно оффтопим.

 

FkoFFДата: Суббота, 06 Августа 2011, 17:05:33 | Сообщение # 28
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
Quote (Hexing)
меньше условий = быстрее код

меньше посторонних ссылок == быстрее код, а не условий ) условия сами по себе много скорости не сожрут, если правильно расставить иф - он даже весь не будет проверяться, другое дело что подобные if\then\else триггерные конструкции делают сотню вызовов и, более того, всегда, аболсютно всегда проверяют все условия, что само по себе уже плохо.


 

Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » Скилл Механика у Тинкера (Апргрейд абилок)
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:

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