改Tween类(可以实现数据动态改变) |
| 作者:佚名 来源:不详 更新:2007-1-13 20:37:05 错误报告 我要投稿 |
这个类文件跟Tween放在同一个目录下 这样就可以用Tween类来变化组件,就不用自己去写渐变函数了 用法: 与Tween差不多 如:
import mx.transitions.fanflash_Tween; import mx.transitions.easing.Strong; var fan = new fanflash_Tween(a, test, Strong.easeOut, 260, 100, 6, true); function test(t:Number) { _root.txt_txt.setSize(_root.txt_txt._width, t); } 要先定义一个函数,有一个参数,这个参数就是用来变化的(当第二个参数为函数时,第一个参数就会没用,所以乱写都可以),刚刚因为须要而改的,不足之处一定有,凑和着用吧,如果第二个参数是字符的话,那就跟平常的TWEEN类一样了 示例:
点击浏览该文件 源文件:
点击浏览该文件 类文件(后缀改成AS):
点击浏览该文件
fanflash_Tween.as
import mx.transitions.BroadcasterMX; import mx.transitions.OnEnterFrameBeacon; class mx.transitions.fanflash_Tween { static var __initBeacon = OnEnterFrameBeacon.init(); static var __initBroadcaster = BroadcasterMX.initialize(fanflash_Tween.prototype, true); public var isPlaying:Boolean; public var addListener:Function; public var removeListener:Function; public var broadcastMessage:Function; public var obj:Object; public var prop:String; var func:Function = function (t, b, c, d) { return c*t/d+b; }; public var begin:Number; public var change:Number; public var useSeconds:Boolean; public var prevTime:Number; public var prevPos:Number; public var looping:Boolean; public var forp:Boolean; public var tf:Function; private var _listeners:Array; private var _duration:Number; private var _time:Number; private var _pos:Number; private var _fps:Number; private var _position:Number; private var _startTime:Number; private var _intervalID:Number; private var _finish:Number; function set time(t:Number):Void { this.prevTime = this._time; if (t>this.duration) { if (this.looping) { this.rewind(t-this._duration); this.update(); this.broadcastMessage("onMotionLooped", this); } else { if (this.useSeconds) { this._time = this._duration; this.update(); } this.stop(); this.broadcastMessage("onMotionFinished", this); } } else if (t<0) { this.rewind(); this.update(); } else { this._time = t; this.update(); } } function get time():Number { return this._time; } function set duration(d:Number):Void { this._duration = (d == null || d<=0) ? _global.Infinity : d; } function get duration():Number { return this._duration; } function set FPS(fps:Number):Void { var oldIsPlaying = this.isPlaying; this.stopEnterFrame(); this._fps = fps; if (oldIsPlaying) { this.startEnterFrame(); } } function get FPS():Number { return this._fps; } function set position(p:Number):Void { if (this.forp) { this.setPosition(p); } else { this.setFunction(p); } } function setPosition(p:Number):Void { this.prevPos = this._pos; this.obj[this.prop] = this._pos=p; this.broadcastMessage("onMotionChanged", this, this._pos); updateAfterEvent(); } function setFunction(p:Number):Void { this.prevPos = this._pos; this.tf(p); this.broadcastMessage("onMotionChanged", this, this._pos); updateAfterEvent(); } function get position():Number { return this.getPosition(); } function getPosition(t:Number):Number { if (t == undefined) { t = this._time; } return this.func(t, this.begin, this.change, this._duration); } function set finish(f:Number):Void { this.change = f-this.begin; } function get finish():Number { return this.begin+this.change; } function fanflash_Tween(obj, prop, func, begin, finish, duration, useSeconds) { OnEnterFrameBeacon.init(); if (!arguments.length) { return; } this.obj = obj; if (typeof (prop) == "string") { this.prop = prop; this.forp = true; } else { this.tf = prop; this.forp = false; } this.begin = begin; this.position = begin; this.duration = duration; this.useSeconds = useSeconds; if (func) { this.func = func; } this.finish = finish; this._listeners = []; this.addListener(this); this.start(); } function continueTo(finish:Number, duration:Number):Void { this.begin = this.position; this.finish = finish; if (duration != undefined) { this.duration = duration; } this.start(); } function yoyo():Void { this.continueTo(this.begin, this.time); } function startEnterFrame():Void { if (this._fps == undefined) { _global.MovieClip.addListener(this); } else { this._intervalID = setInterval(this, "onEnterFrame", 1000/this._fps); } this.isPlaying = true; } function stopEnterFrame():Void { if (this._fps == undefined) { _global.MovieClip.removeListener(this); } else { clearInterval(this._intervalID); } this.isPlaying = false; } function start():Void { this.rewind(); this.startEnterFrame(); this.broadcastMessage("onMotionStarted", this); } function stop():Void { this.stopEnterFrame(); this.broadcastMessage("onMotionStopped", this); } function resume():Void { this.fixTime(); this.startEnterFrame(); this.broadcastMessage("onMotionResumed", this); } function rewind(t):Void { this._time = (t == undefined) ? 0 : t; this.fixTime(); this.update(); } function fforward():Void { this.time = this._duration; this.fixTime(); } function nextFrame():Void { if (this.useSeconds) { this.time = (getTimer()-this._startTime)/1000; } else { this.time = this._time+1; } } function onEnterFrame():Void { this.nextFrame(); } function prevFrame():Void { if (!this.useSeconds) { this.time = this._time-1; } } function toString():String { return "[fanflash_Tween]"; } private function fixTime():Void { if (this.useSeconds) { this._startTime = getTimer()-this._time*1000; } } private function update():Void { this.position = this.getPosition(this._time); } }
|
|
| 文章录入:skyuu 责任编辑:skyuu |
|
| 【字体:小 大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 |