PDA

Просмотр полной версии : вопрос по оптимизации обработки рассчетов движения n объектов


orcpochta
16.02.2009, 11:15
Как вы думаете, что "быстрее":
- вешать на каждый объект (из n объектов) свой обработчик onEnterFrame;
- вешать обработчик onEnterFrame на какой-то внешний клип и в нем проходить циклом по всем объектам, которых надо "двинуть"?

Пример: 1000 снежинок.

Со своих наблюдений я сделал вывод, что вешать свой обработчик на каждый объект эффективней, в условиях, когда процессор перестает справляться с обсчетами из-за большого количества объектов - движение менее дискретное. Хотя, казалось бы все должно быть наоборот, т.к. один обработчик, совершающий n наборов операций, по логике должен быть шустрее n обработчиков, совершающих 1 операцию, т.к. не надо тратить процессорное время на перепрыгивание по функциям-обработчикам.

А вы как считаете? Или, может быть, что наблюдали?

qazwsx
16.02.2009, 12:09
А обход этих 1000 снежинок у тебя каким образом проиходит в массиве? Вооще тут от реализации всего кода на разных участках, зависит в каком из случаев будет производительность выше.

orcpochta
16.02.2009, 12:57
А обход этих 1000 снежинок у тебя каким образом проиходит в массиве? Вооще тут от реализации всего кода на разных участках, зависит в каком из случаев будет производительность выше.

снежинки именованы snowflake0, snoqflake1...snowflakeN. У каждой из них есть snowflake.speedX и snowflake.speedY, обход через for.

qazwsx
16.02.2009, 16:27
Попробуй в цикле обходить сразу 5 или 10 снежинок 1 не одну. И еще если я правильно понимаю speedX speedY это геттеры класа? Тогда что происходит при присваивании им значения?

orcpochta
16.02.2009, 17:16
Попробуй в цикле обходить сразу 5 или 10 снежинок 1 не одну. И еще если я правильно понимаю speedX speedY это геттеры класа? Тогда что происходит при присваивании им значения?

это не геттеры, это просто дельты, на которые смещается снежинка, т.е. они генерируются при создании снежинки и она с ними живет..))
snowflakeN._x += snowflake.speedX;

nOobCrafter
16.02.2009, 19:56
Как вы думаете, что "быстрее":
- вешать на каждый объект (из n объектов) свой обработчик onEnterFrame;
- вешать обработчик onEnterFrame на какой-то внешний клип и в нем проходить циклом по всем объектам, которых надо "двинуть"?
То есть получется лучше вариант 1, с учетом того что не на каждый обьект надо вешать, а на несколько? Просто такая же ситуация только кнупки и надо проверять их состояние..(

qazwsx
16.02.2009, 21:36
Состояние ненадо проверять. Кнопки сами должны оповещать слушателя о своем состоянии. А в случае orcpochta обход сразу нескольких обьектов за 1 итирацию цикла должен быть эфективней поидее