![]() |
Движение группы объектов. вопрос по оптимизации!
Столкнулся с проблемой - собственно тормозами... делаю проект, в котором на фоне падают монеты.
так вот: в среднем их одновременно на экране - около 20, ну плюс минус, но при этом возникают заметные глазу подтормаживания((( Собственно, я поискал советов по оптимизации, и парочку использовал... дело несколько улучшилось, но подвисания пока слишком заметны. эксперементальным путем установил, что они именно из-за этого элемента программы((( Реализую я все это дело следующим образом -есть функция droping(), отвечающая за выброс монет. и функция moving() отвечающая за их падения. первая вызывается с помощью setInterval с периодом = 350 - на практике показалось что он работает лучше таймера(вроде бы) ну а moving -из слушателя события enterFrame. вот. плюс положение и параметры монетки определяются с использованием math.random(), который вроде прожорливый, как говорят. выглядит все это следующим образом: Код AS3:
Вот. Вопрос - реально ли как-то реализовать обход 20-30ти объектов и их перемещение без чертовых тормозов? Собственно не так. Я видел, что реально... но КАК? Буду рад любому совету, спасибо) ps: fps= 24, имеет ли это значение вообще? |
Вы бы выложили swf-ку, может у вас там графика навороченная, которая все и тормозит. Код, на мой взгляд, тормозным не выглядит. Можно "оптимизировать" функцию moving так:
Код AS3:
|
А Вы монеты всегда новые создаёте?
|
Поддерживаю bav. Можно ещё массивы на векторы поменять.
И ещё смысл вот этого не совсем понятен: Код AS3:
|
Цитата:
------------------------- про вектор - спасибо ... надо попробовать) ------------------------------- монеты - да, всегда новые. когда падают ниже "плинтуса" - удаляю. |
На сколько мне известно, а это очень мало, то при анимации нужно исключать - создание объектов ( зачем их создавать во время анимации, если можно создать заранее и ещё было бы хорошо, если их не удалять, а использовать повторно), обращение к свойствам ( это x, y и прочее, если происходит в одном методе происходит много операций с координатой объекта, то лучше один раз её сохранить в локальной переменной ), обращениее через динамические скобки и потеря фокуса во время итераций. Больше я вроде не знаю.
|
а почему бы вам это через EnterFrame не сделать?
код действительно тормозным не выглядит. |
хмммм.... попробовал использовать вектор место массива.... в локальной версии работает... загружаю в контач (приложенька для контача планируется) - белый экран О.о
версия плейера - 10.3, выше не могу - ругаются используемые мной библиотеки. Добавлено через 2 минуты Цитата:
в каком смысле? moving и вызвается по enterframe-у. а дропать монетки можно и лучше реже - визуально разницы нет, а вроде как разгружается процессор ) |
почему бы монетке самой не падать, а достигая дна не переносится вверх и падать опять с новыми параметрами (скорости, размерами)? Это же просто дождик/снег с него многие начинали.
|
Вектор на двадцать объектов может и в обратную сказаться.. Плюсов он не даст.
|
вектор - исправил. (не знаю как). вроде лучше. спасибо. буду тестить)
Добавлено через 41 секунду Цитата:
|
я тоже читал и смеялся, когда мне говорили, что вектор это корявенько, думал, ну как же это, я же читал.
А когда начал проверять, то оказалось, что он эффективен только на большом кол-ве элементов. И чтобы не соврать, я просто не помню с чем конкретно связанно, но он даже замедлял работу кода, после чего я и перестал пользоваться им. до больших объёмов ещё не дорос. |
Вложений: 1
Код AS3:
Код AS3:
|
Цитата:
Добавлено через 1 минуту Цитата:
в любом случае - мне судя по всему помогло) Добавлено через 2 минуты по идеи - все типизированое работает быстрее.. нет разве? |
Цитата:
У вас 3 раза в секунду бегаем в цикле по огромному условию, а все остальное то же самое. |
кстати при тестах выявилась еще одна проблема.... часть монеток походу не удаляется... знаю это другая проблема, но не хочу новую тему открывать)
подзрения возникли после того как саметил, что длинна массива медленно но увеличивается... если не первой минуте количество монет на экране(после того как они заполнили экран) колеблется от 34 до 40.. то спустя пару минут возрастает до 40-50! код вы видели, может кто-нибудь сказать почему это может происходить? |
:D Да уж
Цитата:
Цитата:
|
Цитата:
а если пользоваться вашим алгоритмом, то что делать есть монетка упала, мы ее кидаем снова вверх, а падать ничего больше не должно. мы ее должны "застопорить". а запускать по надобности. ну так это будет шар вид с боку... с той лишь разницей, что мы не создаем монетку и не добавляем на сцену. но врятли это сыграет решающую роль Добавлено через 1 минуту Цитата:
длинна так и так не должна расти после достижения максимума.. вроде бы.... |
Непонятный код, а где addFB растет?
|
Цитата:
|
| Часовой пояс GMT +4, время: 21:18. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.