Официальный сайт движения «Москва без Лужкова!»
Главная Новости Москвы Наши новости Популярное
  • Новости
  • Новости
  • ВХОД В ЛИЧНЫЙ КАБИНЕТ
    логин
    пароль
       
    Новости

    Рашэнне праблемы прадукцыйнасці ва Flash

    Першапачаткова праца над гульнёй «Грыбнік» ішла хутка і прагрэсіўна. Я вельмі радаваўся тэхналогіі Flash благароддзе яе прастаце выкарыстання, і быў поўны аптымізму. Але пазней я з жахам выявіў, што Flash з цяжкасцю выдае належнае колькасць кадраў, калі аб'ектаў становіцца больш за сотню.

    А ў гульні павінна быць карта памерам 20х20 клетачак, ды і яшчэ з некалькімі пластамі. Гэта значыць аб'ектаў на карце толькі ў адным пласце можа быць лёгка да 300 шт. А некаторыя аб'екты яшчэ і з анімацыяй, што яшчэ горш для прадукцыйнасці, таму што анімацыя тыпу Motion і Shape Tween праграмная. А гэта значыць, што кожны кадр не толькі проста рэндэру, але і вырабляецца яшчэ маса разлікаў за межамі майго кода для разліку прамежкавых кадраў у MovieClip`ах. І нават хітры рэндэру ва Flash, які перамалёўвае толькі абноўленыя ўчасткі экрана - не ратуе сітуацыю.

    Вось тут - то мой аптымізм трохі згас. Я быў засмучаны. Няўжо такая выдатная тэхналогія, як Flash, падыходзіць толькі для банэраў і прымітыўных гульняў !?

    Вектарная графіка сама па сабе вельмі складаная штука. Любы, хто хоць неяк знаёмы з вектарнай графікай, павінен выдатна разумець, што ўсе крывыя пралічваюцца складанымі матэматычнымі формуламі. А калі справа яшчэ тычыцца анімацыі, то там неабходнасць не толькі ў адлюстраванні масіва кропак і пабудове паміж імі крывых, але і ў пошуку прамежкавых палажэнняў крывых паміж ключавымі кадрамі. І такія разлікі павінны выконвацца не менш за 25 раз у секунду для гульні. Гэта значыць, выходзіць, што выдаткі на разлікі максімальныя, а вынік вельмі пасрэдны.

    Выхад вызначана ёсць - адмовіцца ад выкарыстання вектарнай графікі, пераводзячы ўсё ў растравую графіку. З растравай графікай кампутара вызначана лягчэй праводзіць разлікі і выконваць рэндэру, так як гэта ўсяго толькі масіў пікселяў з найпростай інфармацыяй. Злавіўшы сябе на гэтай думкі я на імгненне спалохаўся: «гэта тое, з-за чаго сышоў, да таго ў выніку і прыйшоў». І пачаў ужо было ўяўляць, як я гэта ўсё буду экспартаваць у растр, а потым назад збіраць MovieClip'ы з растравым малюнкамі ўручную. Вось тут-то ўсе асноўныя плюсы вектарнай графікі: якасць у любым памеры і мінімум месца для захоўвання дадзеных - пачынаюць цьмянець. Але рашэнне вызначана павінна быць.

    У Flash ёсць адмысловая опцыя «cache as bitmap», якую можна ўсталёўваць для асобных кліпаў - гэта абазначае, што кліп дзесьці ў памяці захоўваецца ў выглядзе растравай карцінкі і больш ня пералічваецца як вектарнае малюнак. Мае эксперыменты паказалі, што гэта дае прырост прадукцыйнасці, але для поўнага шчасця яго яўна не дастаткова. Прычына хутчэй за ўсё ў тым, што час ад часу гэтыя «кэшаваныя» кліпы зноў абнаўляюцца за кошт чаго могуць узнікаць тормазы. Ды і колькасць аб'ектаў па-ранейшаму застаецца ранейшым, што працягвае выклікаць праблемы з прадукцыйнасцю.

    Прызнацца я практычна не знаёмы з унутраным прыладай Flash але ў ходзе практычных эксперементов высвятлілася што для Flash прыкладання хутчэй апрацоўваць адну вялікую карцінку чым мноства маленькіх кліпаў. Чаму гэта так, я здагадваюся, але апісваць не буду, бо гэта будзе нудна і сумна і магчыма я наогул памыляюся ў сваіх здагадках. Толькі такая вялікая карцінка павінна складацца не з масы ўкладзеных кліпаў, а з аднаго вялікага битмапа. Прасцей кажучы, калі ў гульні плануецца мноства розных аб'ектаў (кліпаў), то іх варта падзяліць на групы (пярэдні план, задні план, дынамічныя аб'екты і да т.п.), потым адзін раз іх усё «отрендерить» ў адзін вялікі битмап, які пасля выкарыстаць як заднік, а ўсе арыгінальныя аб'екты выдаліць.

    ), потым адзін раз іх усё «отрендерить» ў адзін вялікі битмап, які пасля выкарыстаць як заднік, а ўсе арыгінальныя аб'екты выдаліць

    Зрабіць растравую карцінку з масы кліпаў проста. Складаем усе кліпы ў тым парадку і чарговасці як трэба, а потым нібы фотаапаратам робім з іх здымак у битмап, які далей выкарыстоўваем як падкладку ў выглядзе гульнявога ўзроўню. Падрабязна пра тое, як гэта зрабіць, вельмі добра расказана ў прыкладзе-ўроку у Хітрыя .

    Гэта ўсё вядома выдатна і настрой маё ўжо палепшылася, бо прадукцыйнасць такімі ня хітрымі спосабамі ўдалося падняць амаль у двое. Але праблема да канца не вырашана, так як ільвіную долю прадукцыйнасці па ранейшаму есць «вектарная анімацыя». Пачынаю ўжо задумвацца пра тое, а што калі прыкладна гэтак жа, але ў выглядзе масіва растравых малюнкаў захоўваць асобныя кадры з MovieClip`ов, а потым іх, як у старыя добрыя часы, выводзіць у патрэбным месцы з патрэбным кадрам. І не паспеў я яшчэ гэтую думку да канца пераварыць, як выявіў, што і гэты «ровар» ужо вынайдзены да мяне, яму толькі трэба адрэгуляваць «педалі» і «сидушку».

    Гэта значыць, прасцей кажучы, я знаходжу некалькі класаў, якія цалкам вырашаюць праблему вектарнай анімацыі, канвертуючы кожны кадр названага кліпа ў масіў растравых малюнкаў. Прычым рэалізавана ўсё так, што ў выніку мы атрымліваем нашчадка MovieClip`а і працуем з ім як з звычайным MovieClip`ом, толькі яго напаўненне цалкам растравы.

    Разабраўшыся з чужым класам, трохі адкарэктаваўшы яго пад сябе і нават выправіўшы аўтарскія багі (а можа быць гэта былі фічы) - я атрымаў .swf файл з усёй гульнявой графікай памерам у 460 кб. і пры гэтым з добрай прадукцыйнасцю. Вузкае месца гэтага падыходу толькі ў тым, што пасля загрузкі флэшкі сыходзіць некаторы час, каб выканаць канвертаванне ўсёй вектарнай графікі ў растравую. Але гэта не страшна, у сярэднім на гэта патрабуецца 5-10 сек. Калі працэс канвертавання аформіць як загрузку флэшкі, то карыстач зусім нічога не заўважыць :)

    І зараз я кажется разумею чаму так мала добрых Flash платформер і любых іншых дынамічных гульняў з картамі больш чым у адзін экран. Не кожны распрацоўшчык падыходзіць да працэсу аптымізацыі ўважліва і як правіла карыстаецца самым простым рашэннем - дзеліць гульню на экраны або стараецца выкарыстоўваць мінімум аб'ектаў. Пра гэта, мяркуючы па ўсім, гэтак жа не здагадваюцца і распрацоўшчыкі сацыяльных гульняў, таму-што іх гульні ў большасці вельмі жудасна тармозяць нават на добрых кампутарах, з-за чаго аўтары магчыма губляюць аўдыторыю.

    Спасылкі па тэме:

    - З вэктару ў растр
    - татальная растеризация


    індыкатары: Action Script 3 , ўрокі
    пастаянная спасылка


     

    Найди свой район!

    Восточный

    Западный

    Зеленоградский

    Северный

    Северо-Восточный

    Северо-Западный

    Центральный

    Юго-Восточный

    Юго-Западный

    Южный

    Поиск:      


     
    Rambler's Top100
    © 2007 Движение «Москва без Лужкова!»