PDA

Просмотр полной версии : Посоветуйте как лучше сэкономить на производительности.


джонатан
25.05.2008, 07:27
Вобщем делаю флешку, на ней 3 мувиклипа (ветки пальмы (растровые)), каждый листик отрезан (в среднем на одной ветке 35 листиков отдельных) каждый листик ходит туда сюда в разнобойном порядке (типа ветер колышит). Как лучше сделать, чтобы сэкономить производительность? Чтобы не глючила на слабых машинах флешка.

1. Непрограмно, при помощи "motion"
2. Програмно при помощи "_rotation"

Причем программист из меня отстойный поэтому мне ничего в голову больше не пришло как сделать 20 кадров в каждом из 3-х мувиков с листами пальмы, обозвать каждый листик (v_a, v_b, v_c и т.д...) а сверху на каждом кадре писать следующее:

На первом:

v_a._rotation = 0;
v_b._rotation = 0;
v_c._rotation = 0;
v_d._rotation = 0;
v_e._rotation = 0;
и т.д...

А наследующих:
На 2-11:

v_a._rotation += 1;
v_b._rotation += 1;
v_c._rotation += 1;
v_d._rotation += 1;
v_e._rotation += 1;
и.т.д...
На 12-20:

v_a._rotation -= 1;
v_b._rotation -= 1;
v_c._rotation -= 1;
v_d._rotation -= 1;
v_e._rotation -= 1;
и.т.д...

Расскажите какой вариант, будет меньше напрягать комп? Ну другие варианты, тоже принимаются :).

Спасибо за внимание.

Psycho Tiger
25.05.2008, 10:57
И в том, и в том случае движение будет идти при помощи математических формул.
Если как говоришь программист из тебя хреновый, то делай лучше встроенным Motion Tween`oм. И чтобы листики по разному шевелились напиши что нибудь вроде (листик один на все)

listik.gotoAndPlay(random(listik._totalframes)+1);


И ещё хочу сказать:
Если листики назвать, скажем, l0,l1,l2,l3,l4 то можно из будет перебрать циклом:

for (var i:Number=0; i<=4; i++){
this["l"+i].gotoAndPlay(random(l._totalframes)+1);
//this["l"+i] хранит ссылку на l1,l2,l3,l4 и т.д. соотвественно
}

джонатан
28.05.2008, 07:59
Если листики назвать, скажем, l0,l1,l2,l3,l4
Я когда проходил базовый курс по флешу, меня учили, что применяя к клипам <Instance Name> - нельзя использовать числа... Неужели это не так???

Вы наверное неправильно представляете себе, как именно шевелятся листики. Мне не надо, чтобы они крутились как вертолетные лопости.

Сделал все при помощи встроенного "Tween motion" - ГЛЮЧИТ ПРОСТО НЕВЫНОСИМО!
И никуда не годится такой вариант...

Скажите, а если я сделаю, покадрово без "Tween motion" тоже будет тормозить?

Помогите пожалуйста! Очень нужно сделать эти листики. Посоветуйте как...

Psycho Tiger
07.06.2008, 11:57
Нус, начнем по полочкам:
Я когда проходил базовый курс по флешу, меня учили, что применяя к клипам <Instance Name> - нельзя использовать числа... Неужели это не так???
Можно. Единственное, инстанс нейм не может начинаться с числа.
Правильный синтаксис:

container["name"+"somethingelse"+"orelse"+may be number"+"etc..."];

Если все находится на сцене - то контейнером является _root, если какойто клип mc - то mc. Обращаемся как к массиву.

Вы наверное неправильно представляете себе, как именно шевелятся листики. Мне не надо, чтобы они крутились как вертолетные лопости.
Вид сверху? Если да, то элементарно: (этот код вставим прямо на таймланй, то есть в кадр)
var num:Number=20; //сколько там у тебя папоротников? это число num+1, так как именуем начиная с 0


function createMc():MovieClip{ //это функция, она возвращает MovieClip
//ей мы програмно рисуем крест.
//она тебе не нужна )
var depth:Number=_root.getNextHighestDepth();
var mc:MovieClip=this.createEmptyMovieClip("mc"+depth, depth);
mc.lineStyle(5, 0xFF00FF, 100);
mc.moveTo(-50, 0);
mc.lineTo(50, 0);
mc.moveTo(0, -50);
mc.lineTo(0, 50);
mc._x=random(Stage.width);
mc._y=random(Stage.height);
return mc;
}
for (var j:Number=0; j<=num; j++) createMc();
//вот и пошел сам код, что нужен тебе. выше можешщь удалить, кроме строчкой с перменной num
//свои папоротники называй как mc0,mc1,mc2,mc3...
this.onEnterFrame=function(){ //в каждом новом кадре
for (var i:Number=0; i<= num; i++){ //ВСЕ папротники
this["mc"+i]._rotation++; //меняет свойство _rotation (т.е. поворот) на 1
}
}

Сделал все при помощи встроенного "Tween motion" - ГЛЮЧИТ ПРОСТО НЕВЫНОСИМО!
И никуда не годится такой вариант...
А что именно глючит? То что папоротник сливается и дергается - это флэш так работает с битмапом :)

Скажите, а если я сделаю, покадрово без "Tween motion" тоже будет тормозить?
Ещё больше. Если так он находит какую то дельту и прибавляет её постоянно куда то, живя тихо и спокойно, то покадрово вы каждый раз будете заставлять его перерисовывать все (абсолютно все) заного.
Помогите пожалуйста! Очень нужно сделать эти листики. Посоветуйте как...
Надеюсь, помог :)

ЗЫ адский пост, №666 :D

NoCD
07.06.2008, 13:17
сколько листьев должно быть?
У меня 100 листьев норм работает, правда комп у меня через чур мощный, что бы наблюдать тормоза с листьями

вот примерчик:

wvxvw
07.06.2008, 15:00
Боюсь, что в этом случае непрограммная анимация будет работать быстрее всего...

MrPoma
07.06.2008, 15:55
Самый бестормозной вариант — видео.

джонатан
09.06.2008, 01:17
Сайт точится под диал-Аперов, поэтому у меня каждый kb на щету. Итак уже почти 0,5 метра...

Psycho Tiger
09.06.2008, 09:08
Если экономить - то хорошо экономить...
Мое имхо - либо сайт для экономии трафика - это хтмл, либо...не сковывать фантазию во флэше (но не больше 2 мб, не у всех мбитные анлимы).