PDA

Просмотр полной версии : анимированный MovieClip и BitmapData


markII
13.11.2009, 15:30
Подскажите пожалуйста.У меня есть анимированный мувик с четыреемя кадрами внутри.В каждом кадре растровое изображение.Как отрисовать этот мувик в BitmapData я понял.Но проблема в том, что рисуется только первый кадр,а мне нужно чтобы все четыре.Как это сделать?.P.S. искал по форуму,но нигде не нашел.:(

mooncar
13.11.2009, 16:20
Проигрываете ролик, и из каждого кадра вызываете функцию отрисовки.
Получите несколько битмап, их можно в массив складывать.
"Обратиться" к кадру на таймлане невозможно.

markII
13.11.2009, 17:43
Понятно.Т.е. мне надо ,например, сделать массив в _root , а из мувика запихать в него эти 4 битмапа?Тогда можно еще один вопрос.А если мне надо чтобы этот мувик двигался(там в этих четырех кадрах человечек ногами передвигает), то мне надо обращатся в цикле к этому массиву и заново все время атачить эти битмапы?

mooncar
13.11.2009, 17:48
А что вам собственно, нужно? К чему такие сложности с битмапой? Что вам мешает использовать этот же мувик по назначению где нужно? Аттачте его из библиотеки с помощью attacheMovie куда нужно и когда нужно и все.
Ну или программно двигайте.

markII
13.11.2009, 17:51
function initGraphics(m:MovieClip,d:Number,xx:Number,yy:Number) {
bounds = m.getBounds(m);
bitmap = new BitmapData(bounds.xMax, bounds.yMax, true, 0);
var mc:MovieClip = createEmptyMovieClip("mc", d);
mc.attachBitmap(logobmd,0,"auto", true);
bitmap.draw(m);
mc._x = xx;
mc._y = yy;
}
islandY = Stage.height-island._height;
initGraphics(man,1,0,islandY);

Вот мой код на таймлайне. man - это тот самый мувик-человечек
Подскажите пожалуйста как мне сделать чтобы мне передвинуть этот мувик но уже в виде битмапа на таймлайне,потому что я его передвигал в нем самом таким образом
onClipEvent(load) {

this._x = -this._width;

}

onClipEvent(enterFrame) {

this._x+=5;
if (this._x>Stage.width) this._x = -this._width;

}

,а то я че то недогоняю.

Добавлено через 3 минуты
Просто у меня мувик состоит из четырех растровых изображений, а когда я его трансформирую(передвигаю или кручу), то он выглядит убого(за место ровных линий квадратики).Поэтому я решил перевести его в битмап.Тогда он выглядит ровно и красиво

mooncar
13.11.2009, 17:57
Так зачем же вам перегонять его в битмап, я что-то не уясню..

markII
13.11.2009, 18:11
Так зачем же вам перегонять его в битмап, я что-то не уясню..
Как зачем???Чтобы картинка была более красивой и ровной.Там я так понял задействован antiAliasing(сглаживание).Вот даже в хэлпе про это есть :

pixelSnapping:String [optional] - The pixel snapping modes are auto, always, and never. The default mode is auto.

smoothing:Boolean [optional] - The smoothing mode is either true for enabled or false for disabled. The default mode is disabled.

mooncar
13.11.2009, 18:43
Ясно. Вам все равно придется отрисовывать битмапу в каждый кадр вашего анимировнаного мувика. Неизвестно еще, как это будет выглядеть.

1. Попробуйте не отрисовывать в битмапу, а в исходных картинках в библиотеке, для каждой из 4-х поставьте галочку Allow Smoothing и посмотрите, что получится.
2. Попробуйте использовать MovieClip.cacheAsBitmap.
3. Выложите исходник. Хотя бы ваш анимированный мувик. Сдается мне, как-то не так вы делаете все, посмотреть хотелось бы.

markII
14.11.2009, 16:00
Попробывал.Ничего не получается.Посмотрите пожалуйста в исходнике,может быть я что то не так делаю.Я там сделал и через битмапу и как сказали выше.Результат - через битмапу красивее все равно.

mooncar
14.11.2009, 19:32
Не очень вас понимаю даже после рассмотрения исходника.
По-вашему, выходит, если изображение четкое, то это "некрасиво", а если изображение дробится на пиксели, то это нормально и хорошо?
Я тут кое-что добавил и переделал - там есть оригинальный (на мой взгляд, вполне приличное качество!) мувик, оригинальный мувик с наложенным блюром (может "красиво" для вас именно так - немного расплывчато) и отрисованный в битмапу (анимировать его, правда я не стал).
На мой взгляд, оригинальный четкий мувик, после отрисовки в битмапу становится грубым и пикселизированным. Оно надо?

Если все-таки надо, то сделать можно и с битмапой.

markII
14.11.2009, 20:28
Понятно.Я это объясняю тем, что глядя на игры сайта mail.ru там вся графика выглядит ровной и сглаженной(например те же шахматы или пушистики).Т.е. когда что то скейлится или крутиттся(я не говорю про передвижение) то на гранях мувика не образуются квадратики.Когда делаешь через битмапу то как раз этого негативного явления не происходит.Спасибо за то что посмотрели мой пример.

mooncar
14.11.2009, 20:40
Понятно.
В общем-то, галочки на AllowSmoothing на мой взгляд достаточно, чтобы избежать негативных явлений. И fps побольше. Искусственно занижать качество все же не стоит.
У меня есть один проект, там я делаю отрисовку в битмапу вот для чего.
На сцене есть сложный блок, в котором много текстовых полей, компонентов, кнопок, и т.д. И все в векторах.
По задумке, при нажатии на кнопку, он должен был плавно увеличивается. Естественно, такой тяжелый и сложный векторный контент не давал делать это визуально качественно, были рывки.
Я сделал так: при нажатии на кнопку этот блок делался невидимым, происходила его отрисовка в битмапу, создавался новый мувик, отрисовывался полученной битмапой. Потом происходило плавное увеличение этого нового блока до заданной величины.
В это время незаметно и мгновенно изменялся размер исходного блока (он оставался невидим) до той же заданной величины.
В конце увеличения новый мувик с битмапой стирался, а исходный проявлялся - с тем же новым увеличенным размером и на том же месте, где находился отрисованный битмапой. Переход был практически незаметным.
Таким образом все происходило визульно качественно - ведь увеличивался мувик не с вектором, а с картинкой-битмап-слепком исходного мувика.

В этом случае как раз такая технология, я думаю, оправдана.