|
|
|||||
Регистрация: Dec 2007
Сообщений: 269
|
альтеранатива TransitionManager
Классу Tween существует множество альтернатив, а вот альтернативы TransitionManager не нашел. Может кто-нибудь знает подобные в свободном доступе? Или дополнительные типы переходных эффектов, кроме стандартных Blinds, Fly и.т.д?
|
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
В чем проблема переписать на AS3 с AS2?
|
|
|||||
Modus ponens
|
Лучше тот, что есть в АС2 не переписывать... он дурацкий и неудобный...
Транзишенов у меня есть штук 5 + немного переделанных стандартных, но для АС2, есси надо выложу, но они не менее "кривые" %) так что прийдется "доработать напильником" %)
__________________
Hell is the possibility of sanity |
|
|||||
Регистрация: Dec 2007
Сообщений: 269
|
Цитата:
Цитата:
|
|
|||||
Modus ponens
|
import flash.geom.Matrix; import flash.geom.Point; import flash.geom.Rectangle; import mx.transitions.Transition; import mx.transitions.TransitionManager; import flash.display.BitmapData; // class mx.transitions.BitmapDissolve extends Transition { public var type:Object = BitmapDissolve; public var className:String = "BitmapDissolve"; private var __tgt:MovieClip; private var __seed:Number = 0; private var __bmp:BitmapData; private var __msk:MovieClip; private var __dissolvedPixels:Number; function BitmapDissolve(content:MovieClip, transParams:Object, manager:TransitionManager) { this.init(content, transParams, manager); } function init(content:MovieClip, transParams:Object, manager:TransitionManager):Void { super.init(content, transParams, manager); this.__tgt = content; this.__bmp = new BitmapData(content._width, content._height, true, 0x00ffffff); this.__bmp.draw(content); this.__seed = transParams.seed || 10; this.__dissolvedPixels = Math.floor(content._width * content._height); this.__msk = content._parent.createEmptyMovieClip('BitmapDissolve_mask', content._parent.getNextHighestDepth()); var mtx:Matrix = content.transform.matrix.clone(); this.__msk.transform.matrix = mtx; this.__msk.attachBitmap(this.__bmp, 0); content._visible = false; } private function _render(p:Number):Void { if(content._visible) content._visible = false; this.__bmp.pixelDissolve(this.__bmp, new Rectangle(0, 0, this.__bmp.width, this.__bmp.height), new Point(0, 0), 10, this.__dissolvedPixels*p, 0); } public function cleanUp():Void { content._visible = true; super.cleanUp(); this.__msk.removeMovieClip(); this.__bmp.dispose(); } public function toString():String { return "[BitmapDissolve Transition]"; } } import mx.transitions.Transition; import mx.transitions.TransitionManager; class mx.transitions.Iris extends Transition { public static var SQUARE:String = "SQUARE"; public static var CIRCLE:String = "CIRCLE"; public static var HEART:String = "HEART"; public static var STAR:String = "STAR"; public var type:Object = Iris; public var className:String = "Iris"; private var _mask:MovieClip; private var _startPoint:Number = 5; private var _cornerMode:Boolean; private var _shape:String = "CIRCLE"; private var _rays:Number = 5; private var _maxDimension:Number; private var _minDimension:Number; private var _renderShape:Function; function Iris (content:MovieClip, transParams:Object, manager:TransitionManager) { this.init (content, transParams, manager); }; function init (content:MovieClip, transParams:Object, manager:TransitionManager):Void { //trace ("Iris.init()"); super.init (content, transParams, manager); if (transParams.startPoint) {this._startPoint = transParams.startPoint}; if(transParams.shape.length) this._shape = transParams.shape; if(!isNaN(transParams.rays)) this._rays = transParams.rays; this._maxDimension = Math.max (this._width, this._height); this._minDimension = Math.min (this._width, this._height); // if _startPoint is an odd number, it's a corner if (this._startPoint % 2) { this._cornerMode = true; } // assign the render function dynamically based on shape choice if (this._shape == "SQUARE") { if (this._cornerMode) { this._render = this._renderSquareCorner; } else { this._render = this._renderSquareEdge; } } else if (this._shape == "CIRCLE") { this._render = this._renderCircle; } else if (this._shape == "HEART"){ this._render = this._renderHeart; } else if (this._shape == "STAR"){ this._render = this._renderStar; } this._initMask(); }; function start ():Void { this._content.setMask (this._mask); super.start(); } function cleanUp ():Void { this._mask.removeMovieClip(); super.cleanUp(); } private function _initMask ():Void { var container:MovieClip = this._content; var depth:Number = this.getNextHighestDepthMC (container); var mask:MovieClip = this._mask = container.createEmptyMovieClip ("__mask_Iris_"+this.direction, depth); //mask._alpha = 30; mask._visible = false; var ib:Object = this._innerBounds; switch (this._startPoint) { case 1: // top left mask._x = ib.xMin; mask._y = ib.yMin; break; case 4: // left mask._x = ib.xMin; mask._y = (ib.yMin + ib.yMax) * .5; break; case 3: // top right mask._rotation = 90; mask._x = ib.xMax; mask._y = ib.yMin; break; case 2: // top center mask._rotation = 90; mask._x = (ib.xMin + ib.xMax) * .5; mask._y = ib.yMin; break; case 9: // bottom right mask._rotation = 180; mask._x = ib.xMax; mask._y = ib.yMax; break; case 6: // right mask._rotation = 180; mask._x = ib.xMax; mask._y = (ib.yMin + ib.yMax) * .5; break; case 7: // bottom left mask._rotation = -90; mask._x = ib.xMin; mask._y = ib.yMax; break; case 8: // bottom center mask._rotation = -90; mask._x = (ib.xMin + ib.xMax) * .5; mask._y = ib.yMax; break; case 5: // center mask._x = (ib.xMin + ib.xMax) * .5; mask._y = (ib.yMin + ib.yMax) * .5; break; default: break; } } // stub--dynamically overwritten by one of the other render methods private function _render (p:Number):Void {} private function _renderCircle (p:Number):Void { var mask:MovieClip = this._mask; var maxRadius:Number; mask.clear(); mask.beginFill (0xFF0000); if (this._startPoint == 5) { // iris from center maxRadius = .5 * Math.sqrt (this._width*this._width + this._height*this._height); this.drawCircle (mask, 0, 0, p*maxRadius); } else { if (this._cornerMode) { // iris from corner maxRadius = Math.sqrt (this._width*this._width + this._height*this._height); this._drawQuarterCircle (mask, p*maxRadius); } else { // iris from edge if (this._startPoint == 4 || this._startPoint == 6) { // half-circle from left or right edge maxRadius = Math.sqrt (this._width*this._width + .25*this._height*this._height); } else if (this._startPoint == 2 || this._startPoint == 8) { // half-circle from top or bottom edge maxRadius = Math.sqrt (.25*this._width*this._width + this._height*this._height); } this._drawHalfCircle (mask, p*maxRadius); } } mask.endFill(); } private function _drawQuarterCircle (mc:MovieClip, r:Number):Void { var x=0, y=0; mc.lineTo (r, 0); mc.curveTo (r+x, Math.tan(Math.PI/8)*r+y, Math.sin(Math.PI/4)*r+x, Math.sin(Math.PI/4)*r+y); mc.curveTo (Math.tan(Math.PI/8)*r+x, r+y, x, r+y); } private function _drawHalfCircle (mc:MovieClip, r:Number):Void { var x=0, y=0; mc.lineTo (0, -r); mc.curveTo (Math.tan(Math.PI/8)*r+x, -r+y, Math.sin(Math.PI/4)*r+x, -Math.sin(Math.PI/4)*r+y); mc.curveTo (r+x, -Math.tan(Math.PI/8)*r+y, r+x, y); mc.curveTo (r+x, Math.tan(Math.PI/8)*r+y, Math.sin(Math.PI/4)*r+x, Math.sin(Math.PI/4)*r+y); mc.curveTo (Math.tan(Math.PI/8)*r+x, r+y, x, r+y); mc.lineTo (0, 0); } //this._maxDimension = Math.max (this._width, this._height); private function _renderSquareEdge (p:Number):Void { var mask = this._mask; mask.clear(); mask.beginFill (0xFF0000); var s = this._startPoint; var w = p*this._width; var h = p*this._height; var z = p*this._maxDimension; if(s == 4 || s == 6){ this.drawBox (mask, 0, -.5*h, w, h); }else if(this._height < this._width){ this.drawBox (mask, 0, -.5*z, h, w); }else{ this.drawBox (mask, 0, -.5*z, z, z); } mask.endFill(); } private function _renderHeart(p:Number):Void { var d:Number = Math.min(this._width,this._height)*p; var k:Number = -d/2; var mask = this._mask; mask.clear(); mask.beginFill (0xFF0000); mask.moveTo(k,k+d/4); mask.curveTo(k,k,k+d/4,k); mask.curveTo(k+d/2,k,k+d/2,k+d/4); mask.curveTo(k+d/2,k,k+d*3/4,k); mask.curveTo(k+d,k,k+d,k+d/4); mask.curveTo(k+d,k+d/2,k+d*3/4,k+d*3/4); mask.lineTo(k+d/2,k+d); mask.lineTo(k+d/4,k+d*3/4); mask.curveTo(k,k+d/2,k,k+d/4); mask.endFill(); } private function _renderStar(p:Number):Void { var d:Number = Math.min(this._width,this._height)*p; var s:Number = Math.PI*2/this._rays; var mask = this._mask; mask.clear(); mask.beginFill(0xFF0000); mask.moveTo(0,d/2); for(var i:Number=0; i<this._rays; i++){ mask.lineTo(d*.5*Math.sin(s*i),d*.5*Math.cos(s*i)); mask.lineTo(d*Math.sin(s*(i+.5)),d*Math.cos(s*(i+.5))); } mask.endFill(); } private function _renderSquareCorner (p:Number):Void { var mask = this._mask; mask.clear(); mask.beginFill (0xFF0000); var s = this._startPoint; var w = p*this._width; var h = p*this._height; if (s == 5) { this.drawBox (mask, -.5*w, -.5*h, w, h); }else if(s == 3 || s == 7){ this.drawBox (mask, 0, 0, h, w); } else { this.drawBox (mask, 0, 0, w, h); } mask.endFill(); } }
__________________
Hell is the possibility of sanity |
|
|||||
Modus ponens
|
import flash.geom.Matrix; import mx.transitions.Transition; import mx.transitions.TransitionManager; import flash.display.BitmapData; // class mx.transitions.PixelRotate extends Transition { public var type:Object = PixelRotate; public var className:String = "PixelRotate"; private var _cellW:Number = 5; private var _cellH:Number = 5; private var __w:Number; private var __h:Number; private var __x:Number; private var __y:Number; private var __d:Number; private var __mtx:Matrix; private var __betha:Number; private var _mask:MovieClip; private var _bmp_arr:Array = []; private var _flt_arr:Array = []; function PixelRotate (content:MovieClip, transParams:Object, manager:TransitionManager) { this.init (content, transParams, manager); }; function init (content:MovieClip, transParams:Object, manager:TransitionManager):Void { super.init (content, transParams, manager); this._cellW = transParams.xSections || 5; this._cellH = transParams.ySections || 5; this.__mtx = content.transform.matrix.clone(); var last_rot:Number = content._rotation; content._rotation = 0; this._flt_arr = content.filters; this.__w = Math.ceil(content._width*100/content._xscale); this.__h = Math.ceil(content._height * 100 / content._yscale); content._rotation = last_rot; this.__x = Math.floor(this.__w / this._cellW); this.__y = Math.floor(this.__h / this._cellH); this.__d = Math.sqrt(this.__x*this.__x + this.__y*this.__y) / 2; this.__betha = Math.atan(this.__x / this.__y); _bmp_arr = []; for (var i:Number = Math.floor(this.__x/2); i <= this.__w; i += this.__x) { this._bmp_arr.push([]); for (var j:Number = Math.floor(this.__y / 2); j <= this.__h; j += this.__y) { var bmpd:BitmapData = new BitmapData(this.__x, this.__y); var mtx:Matrix = new Matrix(); mtx.translate(this.__x / 2 - i, this.__y / 2 - j); bmpd.draw(content, mtx); this._bmp_arr[this._bmp_arr.length-1].push(bmpd); } } }; private function _render (p:Number):Void { if (!this._mask) { this._mask = content._parent.createEmptyMovieClip('_PixelRotateMask', content._parent.getNextHighestDepth()); var mtx:Matrix = this.__mtx.clone(); _mask.transform.matrix = mtx; _mask.filters = this._flt_arr; content._visible = false; //content._alpha = 50; } // this._mask.clear(); var ii:Number = 0; var jj:Number = 0; for (var i:Number = Math.floor(this.__x / 2); i <= this.__w; i += this.__x, ii++) { jj = 0; for (var j:Number = Math.floor(this.__y / 2); j <= this.__h; j += this.__y, jj++) { var mtx:Matrix = new Matrix(); mtx.translate(this.__x / 2 - i, this.__y / 2 - j); this._bmp_arr[ii][jj].draw(content, mtx); this._drawRotatedRectangle(this._mask, i, j, this.__d*p, Math.PI*2*p, ii, jj, p); } } }; private function _drawRotatedRectangle(mc:MovieClip, x:Number, y:Number, d:Number, r:Number, i:Number, j:Number, p:Number):Void { var mtx:Matrix = new Matrix(); mtx.rotate(Math.PI * 2 - r); mtx.scale(p, p); mtx.translate(x - d * Math.sin(r - this.__betha), y - d * Math.cos(r - this.__betha)); //mc.lineStyle(1, 0xff, 100); mc.beginBitmapFill(this._bmp_arr[i][j], mtx); mc.moveTo(x - d * Math.sin(r - this.__betha), y - d * Math.cos(r - this.__betha)); mc.lineTo(x - d * Math.sin(r + this.__betha), y - d * Math.cos(r + this.__betha)); mc.lineTo(x - d * Math.sin(r + Math.PI - this.__betha), y - d * Math.cos(r + Math.PI - this.__betha)); mc.lineTo(x - d * Math.sin(r + Math.PI + this.__betha), y - d * Math.cos(r + Math.PI + this.__betha)); mc.endFill(); } function cleanUp ():Void { super.cleanUp(); for (var i:Number = 0; i < this._bmp_arr.length; i++) { for (var j:Number = 0; j < this._bmp_arr[i].length; j++) { this._bmp_arr[i][j].dispose(); } } _bmp_arr = []; this._mask.removeMovieClip(); content._visible = true; }; } import flash.geom.Matrix; import flash.geom.Point; import flash.geom.Rectangle; import flash.geom.ColorTransform; import mx.transitions.Transition; import mx.transitions.TransitionManager; import flash.display.BitmapData; import flash.filters.DisplacementMapFilter; import flash.filters.BitmapFilter; import flash.filters.ConvolutionFilter; // class mx.transitions.Ripple extends Transition { public var type:Object = Ripple; public var className:String = "Ripple"; private var __tgt:MovieClip; private var __msk:MovieClip; private var __bmp:BitmapData; private var __obmp:BitmapData; private var __rbmp1:BitmapData; private var __rbmp2:BitmapData; private var __map:BitmapData; private var __buf:BitmapData; private var __water:DisplacementMapFilter; private var __wave:BitmapFilter; private var __damp:ColorTransform; private var __double:Matrix; private var __identity:Matrix; private var __origin:Point; private var __full:Rectangle; private var __quarter:Rectangle; private var __h:Number = Number.NaN; private var __w:Number = Number.NaN; private var __h2:Number = Number.NaN; private var __w2:Number = Number.NaN; function Ripple (content:MovieClip, transParams:Object, manager:TransitionManager) { this.init(content, transParams, manager); } function init(content:MovieClip, transParams:Object, manager:TransitionManager):Void { super.init(content, transParams, manager); this.__tgt = content; this.__w = content._width; this.__h = content._height; this.__w2 = this.__w/2; this.__h2 = this.__h/2; this.__bmp = new BitmapData(this.__w, this.__h); this.__bmp.draw(content); this.__obmp = new BitmapData(this.__w, this.__h, false, 128); this.__rbmp1 = new BitmapData (this.__w2, this.__h2, false, 128); this.__rbmp2 = new BitmapData (this.__w, this.__h, false, 128); this.__map = new BitmapData (this.__w2, this.__h2, false, 128); this.__buf = new BitmapData (this.__w2, this.__h2, false, 128); this.__wave = BitmapFilter(new ConvolutionFilter (3, 3, [1,1,1,1,1,1,1,1,1], 9, 0)); this.__damp = new ColorTransform (0, 0, 0.99609374, 1, 0, 0, 2, 0); this.__origin = new Point (); this.__water = new DisplacementMapFilter (this.__rbmp2, this.__origin, 4, 4, 32, 32, "ignore"); this.__quarter = new Rectangle (0, 0, this.__w2, this.__h2); this.__full = new Rectangle (0, 0, this.__w, this.__h); this.__identity = new Matrix (); this.__double = new Matrix (); this.__double.a = this.__double.d = 2; this.__msk = content._parent.createEmptyMovieClip('Ripple_mask', content._parent.getNextHighestDepth()); this.__msk.attachBitmap(this.__obmp, 0); this.__msk.transform.matrix = content.transform.matrix.clone(); content._visible = false; } private function _render(p:Number):Void { this.__rbmp1.applyFilter(this.__map, this.__quarter, this.__origin, this.__wave); this.__rbmp1.draw (this.__rbmp1, this.__identity, null, "add"); this.__rbmp1.draw (this.__buf, this.__identity, null, "difference"); this.__rbmp1.draw (this.__rbmp1, this.__identity, this.__damp); this.__rbmp2.draw (this.__rbmp1, this.__double, null, null, null, true); this.__obmp.applyFilter(this.__bmp, this.__full, this.__origin, BitmapFilter(this.__water)); this.__buf = this.__map; this.__map = this.__rbmp1.clone (); for (var i = 0; i < p; i += .02) { this.__wobbleXY(1 + Math.floor(Math.random()*(this.__w - 1)), 1 + Math.floor(Math.random()*(this.__h - 1))); } } private function __wobbleXY(x:Number, y:Number):Void { x /= 2; y /= 2; this.__map.setPixel (x + 1, y, 0xFFFFFF); this.__map.setPixel (x - 1, y, 0xFFFFFF); this.__map.setPixel (x, y + 1, 0xFFFFFF); this.__map.setPixel (x, y - 1, 0xFFFFFF); this.__map.setPixel (x, y, 0xFFFFFF); } public function cleanUp():Void { super.cleanUp(); __msk.removeMovieClip(); __bmp.dispose(); __obmp.dispose(); __rbmp1.dispose(); __rbmp2.dispose(); __map.dispose(); __buf.dispose(); } public function toString():String { return "[Ripple Transition]"; } }
__________________
Hell is the possibility of sanity |
|
|||||
Modus ponens
|
import mx.transitions.Transition; import mx.transitions.TransitionManager; import flash.filters.ColorMatrixFilter; class mx.transitions.Sepia extends Transition { public var type:Object = Sepia; public var className:String = "Sepia"; private var myColorMatrix_filter:ColorMatrixFilter; private var __tgt:MovieClip; private var __tint:Number = 0x000000; private var __to:Object = {}; function Sepia(content:MovieClip, transParams:Object, manager:TransitionManager) { this.init(content, transParams, manager); } function init(content:MovieClip, transParams:Object, manager:TransitionManager):Void { super.init(content, transParams, manager); this.myColorMatrix_filter = new ColorMatrixFilter(); this.__tgt = content; this.__tint = transParams.tint; this.__to = toRGB(this.__tint); } private function _render(p:Number):Void { var rc:Number = 0.3086; var gc:Number = 0.6094; var bc:Number = 0.0820; var myElements_array:Array = [1-p*(1-rc)+this.__to._r*p, p*gc, p*bc, 0, 0, p*rc, 1-p*(1-gc)+this.__to._g*p, p*bc, 0, 0, p*rc, p*gc, 1-p*(1-bc)+this.__to._b*p, 0, 0, 0, 0, 0, 1, 0]; this.myColorMatrix_filter = new ColorMatrixFilter(myElements_array); this.__tgt.filters = [myColorMatrix_filter]; } private function toRGB(_num:Number):Object { var c_obj:Object = {_r:((_num >> 16) & 0xff)/255, _g:((_num >> 8) & 0xff)/255, _b:(_num & 0xff)/255}; return c_obj; } public function toString():String { return "[Sepia Transition]"; } } import flash.geom.Matrix; import flash.geom.Point; import flash.geom.Rectangle; import mx.transitions.Transition; import mx.transitions.TransitionManager; import flash.display.BitmapData; import flash.filters.DisplacementMapFilter; // class mx.transitions.Wobble extends Transition { public var type:Object = Wobble; public var className:String = "Wobble"; private var __tgt:MovieClip; private var __seed:Number = 0; private var __bmp:BitmapData; private var __acceleration:Number = 10; private var __msk:MovieClip; private var __flt:DisplacementMapFilter; function Wobble (content:MovieClip, transParams:Object, manager:TransitionManager) { this.init(content, transParams, manager); } function init(content:MovieClip, transParams:Object, manager:TransitionManager):Void { trace('started'); super.init(content, transParams, manager); this.__tgt = content; this.__bmp = new BitmapData(content._width, content._height, true, 0x00ffffff); this.__bmp.perlinNoise(0, 10, 1, Math.floor(Math.random()*100), false, true, 1, true, null); } private function _render(p:Number):Void { this.__seed += this.__acceleration; if (this.__seed > this.__bmp.width/4 || this.__seed < -this.__bmp.width/4) { this.__acceleration*=-1; } var p0:Point = new Point(Math.floor((content._width - this.__bmp.width) / 2), -p); var scale:Number=this.__seed*p; var displMap = new DisplacementMapFilter(this.__bmp, p0, 1, 0, scale, 0, "wrap"); content.filters=[displMap]; } public function toString():String { return "[Wobble Transition]"; } } import mx.transitions.Transition; import mx.transitions.TransitionManager; import mx.transitions.rendering.*; import mx.transitions.easing.Strong; class mx.transitions.StainedGlass extends Transition { public var type:Object = StainedGlass; public var className:String = "StainedGlass"; private var __map:Map; function StainedGlass(content:MovieClip, transParams:Object, manager:TransitionManager) { this.init(content, transParams, manager); } function init(content:MovieClip, transParams:Object, manager:TransitionManager):Void { transParams.easing = Strong.easeIn; super.init(content, transParams, manager); super.TWN.FPS = 12; this.__map = new Map(content, content._width, content._height); } private function _render(p:Number):Void { this.__map.__draw(p); if (content._visible) { content._visible = false; } } public function cleanUp():Void { this.content._visible = true; super.cleanUp(); this.__map.__remove(); } public function toString():String { return "[StainedGlass Transition]"; } } rendering.zip В аттаче нужные ей классы
__________________
Hell is the possibility of sanity |
|
|||||
Modus ponens
|
ЗЫ. Сорри за вынужденный мультипостинг, просто есть ограничение на количество знаков %)
ЗЫЫ. Это небольшая модификация которую я сделал в классе Transition, чтобы можно было из наследника управлять свойствами твина, который будет играть анимацию. ЗЫЫЫ. Есть жеж пакет fl.transitions, там вроде и менеджер ест...
__________________
Hell is the possibility of sanity |
|
|||||
Регистрация: Dec 2007
Сообщений: 269
|
Большое спасибо!
|
Часовой пояс GMT +4, время: 16:52. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|