![]() |
|
||||||||||
|
|||||
|
[+4 06.05.14]
|
Если пройти по ссылке, можно увидеть один из часто используемых эффектов в фото галлереях http://osc4.template-help.com/joomla_28615/
Данный эффект на сколько я знаю делался ручками , а не кодом. Кто нибудь видел в нете опенсоурс либы с такими вот разными переходами ? Я пробовал делать что-то похожее кодом, но выходит дикая нагрузка и все тормозит. Подход использовал такой : брал битмап дату картинки, разрезал ее на N кол-во квадратов , далее - либо создавал мини-битмапку каждого квадрата и твинмаксом в цикле анимировал ( либо рандомно , либо по итератору ) например по альфе. - либо каждую мини-битмапку пихал в спрайт и методом выше анимировал уже спрайты ( в случае если нужно сделать привязку по центру каждой битмапки например ) И в первом ( быстрее на порядок ) и во втором случае, при разрезке скажем 20*20 и картинке > 800 уже начинаются приличные тормоза, даже при простом анимировании, никто даже и не говорит про фильтры например, - ну не руками же все это делать? ![]()
__________________
Марк Tween |
|
|||||
|
[+4 06.05.14]
|
Цитата:
package com.in4core.text.effects { import com.greensock.TweenMax; import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.DisplayObject; import flash.display.DisplayObjectContainer; import flash.display.Sprite; import flash.events.TimerEvent; import flash.geom.Point; import flash.geom.Rectangle; import flash.utils.Timer; /** * ... * @author in4core lab */ public final class GLCubicBlurTransition { private var _tempSource:DisplayObject; private var _tempHolder:DisplayObjectContainer; private var _tempArray:Array = []; private var _sprite:Sprite = new Sprite(); private var _timer:Timer; private var _oneTime:int; public function GLCubicBlurTransition( ) { _timer = new Timer(0); _sprite.mouseChildren = false; _sprite.mouseEnabled = false; } public function slice(source:DisplayObject , holder:DisplayObjectContainer, numW:int , numH:int ):void { _tempSource = source; _tempHolder = holder; _sprite.x = source.x; _sprite.y = source.y; const w:int = _tempSource.width / numW; const h:int = _tempSource.height / numH; const b:BitmapData = new BitmapData(_tempSource.width , _tempSource.height, true, 0); b.draw(_tempSource); for (var i:int = 0; i < numW + 1; i++) { for (var j:int = 0; j < numH + 1; j++) { const bd:BitmapData = new BitmapData(w + 1, h + 1, true, 0); bd.copyPixels(b , new Rectangle(i * w , j * h , w , h ) , new Point() ); const bt:Bitmap = new Bitmap(bd , 'never' , true); const sp:Sprite = new Sprite(); sp.addChild(bt); bt.x = -bt.width / 2; bt.y = -bt.height / 2; sp.alpha = 0; sp.addChild(bt); _sprite.addChild(sp); _tempArray.push(sp); sp.x = i * w + sp.width / 2; sp.y = j * h + sp.height / 2; } } _tempHolder.addChild(_sprite); _tempSource.visible = false; } public function fadeTrans(time:int):void { for (var i:int = 0; i < _tempArray.length; i++) { TweenMax.fromTo( _tempArray[i] , time / 1000 , { scaleX:0 , scaleY:0 , alpha:0 } , { scaleX:1 , scaleY:1 , alpha:1 , onComplete:i == _tempArray.length - 1 ? onComplete_cubicBlurTransition : null } ); } } public function blurTrans(time:int):void { _timer.delay = time; _timer.addEventListener(TimerEvent.TIMER , update_cubicBlurTransition); _timer.start(); } private function update_cubicBlurTransition(e:TimerEvent):void { var tar:Timer = e.target as Timer; var num:int = Math.floor( Math.random() * _tempArray.length ); if (!_tempArray.length) { tar.stop(); return; } var c:Sprite = _tempArray[num]; TweenMax.fromTo ( c , 1 , { blurFilter: { blurX:80 } , scaleX:0 , scaleY:0 }, { blurFilter: { blurX:0 } , alpha:1 , rotation:360 , scaleX:1 , scaleY:1, onComplete: _tempArray.length > 1 ? null : onComplete_cubicBlurTransition } ); _tempArray.splice(num,1); } private function onComplete_cubicBlurTransition():void { _tempSource.visible = true; _tempHolder.removeChild(_sprite); _tempArray = []; _tempSource = null; _tempHolder = null; while (_sprite.numChildren) _sprite.removeChildAt(0); } } } Попробйте
__________________
Марк Tween |
|
|||||
|
Цитата:
В разрезании смысла нет, если картинки остаются в своих границах. Такой эффект можно реализовать с помощью BitmapData#copyPixels, BitmapData#draw или шейдерами. Добавлено через 6 минут Вот, например, и более навороченный переход. http://blog.soulwire.co.uk/laborator...itch-generator
__________________
משיח לא בא משיח גם לא מטלפן |
|
|||||
|
Нужно рисовать все в одну битмапдату из кусочков битмапдаты, перед этим ее лочить, тогда должно быть в разы быстрее.
А еще лучше, использовать Pixel Blender. Вот у Zebestov-а, крутой фильтр есть: http://www.flasher.ru/forum/showthread.php?t=147772 UPD: и еще http://blog.bellinsky.com/ru/2012/06...B%D1%8F-flash/ |
|
|||||
|
[+4 06.05.14]
|
Цитата:
Цитата:
__________________
Марк Tween |
|
|||||
|
Цитата:
__________________
משיח לא בא משיח גם לא מטלפן Последний раз редактировалось alatar; 13.11.2012 в 21:04. |
|
|||||
|
А у силина с помощью чего битмапы меняются? Тоже ПБ?
http://silin.su/#AS3/gadgets/bitmapTweener/bin
__________________
Дети не должны знать о своих родителях |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Я вообще не понял, причем тут битмапдаты и прочие копипиксели, а тем более блендеры. Обычные анимированные маски, одна копия картинки с режимом наложения (может, оверлей, или другим), другая с обычным; у первой маска открывается чуть раньше, маска второй догоняет. Картинки при этом масштабируются из чуть бОльшего размера в нормальный, но видно же, что "куски" не смещены относительно друг друга.
__________________
Reality.getBounds(this); |
![]() |
![]() |
Часовой пояс GMT +4, время: 07:27. |
|
|
« Предыдущая тема | Следующая тема » |
|
|