- 浏览: 435500 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
fred7510:
死的啊。。不过还是谢了
flex 截图 -
hechuanshan:
flex状态及动画 -
Da嗒_Sunny:
求使用说明
flex图片裁剪 -
wapj23:
...
flex中定制右键菜单 -
lion_leon:
谢谢!帮了我的大忙了!
利用flashvars给flash传值
最近做的东西,对于效果编程比较多,特别是缓冲,加速度等效果,特意研究了一下Tween类,过年没什么礼物给大家,写篇教程分享给大家,算是过年送给大家的新年礼物!
下面是官方写的fl.transitions.Tween类:
可以先尝试看一下这段代码的写法,用这个方法去看:
从构造函数看起,假设我使用了该类
new Tween(mc,"x",Regular.easeOut,0,200,4);
结合adobe的帮助文档,当初始化实例的时候,便对对象mc的x进行Regular.easeOut操作,具体是从0值到200值,历时4帧
然后问一个为什么,他为什么会对对象mc的x进行Regular.easeOut操作,具体是从0值到200值,历时4帧?
带着这个问题,现在开始看这个类吧!从构造函数看
package fl.transitions
{
import flash.events.*;
import flash.display.*;
import flash.utils.*;
[Event(name="motionChange", type="fl.transitions.TweenEvent")]
[Event(name="motionFinish", type="fl.transitions.TweenEvent")]
[Event(name="motionLoop", type="fl.transitions.TweenEvent")]
[Event(name="motionResume", type="fl.transitions.TweenEvent")]
[Event(name="motionStart", type="fl.transitions.TweenEvent")]
[Event(name="motionStop", type="fl.transitions.TweenEvent")]
public class Tween extends EventDispatcher
{
protected static var _mc:MovieClip = new MovieClip();
public var isPlaying:Boolean = false;
public var obj:Object = null;
public var prop:String = "";
public var func:Function = function (t:Number, b:Number, c:Number, d:Number):Number { return c*t/d + b; }
public var begin:Number = NaN;
public var change:Number = NaN;
public var useSeconds:Boolean = false;
public var prevTime:Number = NaN;
public var prevPos:Number = NaN;
public var looping:Boolean = false;
private var _duration:Number = NaN;
private var _time:Number = NaN;
private var _fps:Number = NaN;
private var _position:Number = NaN;
private var _startTime:Number = NaN;
private var _intervalID:uint = 0;
private var _finish:Number = NaN;
private var _timer:Timer = null;
public function get time():Number
{
return this._time;
}
public 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.dispatchEvent(new TweenEvent(TweenEvent.MOTION_LOOP, this._time, this._position));
} else {
if (this.useSeconds) {
this._time = this._duration;
this.update();
}
this.stop();
this.dispatchEvent(new TweenEvent(TweenEvent.MOTION_FINISH, this._time, this._position));
}
} else if (t < 0) {
this.rewind();
this.update();
} else {
this._time = t;
this.update();
}
}
public function get duration():Number
{
return this._duration;
}
public function set duration(d:Number):void
{
this._duration = (d <= 0) ? Infinity : d;
}
public function get FPS():Number
{
return this._fps;
}
public function set FPS(fps:Number):void
{
var oldIsPlaying:Boolean = this.isPlaying;
this.stopEnterFrame();
this._fps = fps;
if (oldIsPlaying)
{
this.startEnterFrame();
}
}
public function get position():Number
{
return this.getPosition(this._time);
}
public function set position(p:Number):void
{
this.setPosition (p);
}
public function getPosition(t:Number=NaN):Number
{
if (isNaN(t)) t = this._time;
return this.func (t, this.begin, this.change, this._duration);
}
public function setPosition(p:Number):void
{
this.prevPos = this._position;
if (this.prop.length)
this.obj[this.prop] = this._position = p;
this.dispatchEvent(new TweenEvent(TweenEvent.MOTION_CHANGE, this._time, this._position));
}
public function get finish():Number
{
return this.begin + this.change;
}
public function set finish(value:Number):void
{
this.change = value - this.begin;
}
function Tween(obj:Object, prop:String, func:Function, begin:Number, finish:Number, duration:Number, useSeconds:Boolean=false)
{
if (!arguments.length) return;
this.obj = obj;
this.prop = prop;
this.begin = begin;
this.position = begin;
this.duration = duration;
this.useSeconds = useSeconds;
if (func is Function) this.func = func;
this.finish = finish;
this._timer = new Timer(100);
this.start();
}
public function continueTo(finish:Number, duration:Number):void {
this.begin = this.position;
this.finish = finish;
if (!isNaN(duration))
this.duration = duration;
this.start();
}
public function yoyo():void
{
this.continueTo(this.begin, this.time);
}
protected function startEnterFrame():void
{
if (isNaN(this._fps))
{
_mc.addEventListener(Event.ENTER_FRAME, this.onEnterFrame, false, 0, true);
}
else
{
var milliseconds:Number = 1000 / this._fps;
this._timer.delay = milliseconds;
this._timer.addEventListener(TimerEvent.TIMER, this.timerHandler, false, 0, true);
this._timer.start();
}
this.isPlaying = true;
}
protected function stopEnterFrame():void
{
if (isNaN(this._fps))
{
_mc.removeEventListener(Event.ENTER_FRAME, this.onEnterFrame);
}
else
{
this._timer.stop();
}
this.isPlaying = false;
}
public function start():void
{
this.rewind();
this.startEnterFrame();
this.dispatchEvent(new TweenEvent(TweenEvent.MOTION_START, this._time, this._position));
}
public function stop():void
{
this.stopEnterFrame();
this.dispatchEvent(new TweenEvent(TweenEvent.MOTION_STOP, this._time, this._position));
}
public function resume():void
{
this.fixTime();
this.startEnterFrame();
this.dispatchEvent(new TweenEvent(TweenEvent.MOTION_RESUME, this._time, this._position));
}
public function rewind(t:Number=0):void
{
this._time = t;
this.fixTime();
this.update();
}
public function fforward():void
{
this.time = this._duration;
this.fixTime();
}
public function nextFrame():void
{
if (this.useSeconds)
this.time = (getTimer() - this._startTime) / 1000;
else
this.time = this._time + 1;
}
protected function onEnterFrame(event:Event):void
{
this.nextFrame();
}
protected function timerHandler(timerEvent:TimerEvent):void
{
this.nextFrame();
timerEvent.updateAfterEvent();
}
public function prevFrame():void
{
if (!this.useSeconds) this.time = this._time - 1;
}
private function fixTime():void
{
if (this.useSeconds)
this._startTime = getTimer() - this._time*1000;
}
private function update():void
{
this.setPosition(this.getPosition(this._time));
}
}
}
{
import flash.events.*;
import flash.display.*;
import flash.utils.*;
[Event(name="motionChange", type="fl.transitions.TweenEvent")]
[Event(name="motionFinish", type="fl.transitions.TweenEvent")]
[Event(name="motionLoop", type="fl.transitions.TweenEvent")]
[Event(name="motionResume", type="fl.transitions.TweenEvent")]
[Event(name="motionStart", type="fl.transitions.TweenEvent")]
[Event(name="motionStop", type="fl.transitions.TweenEvent")]
public class Tween extends EventDispatcher
{
protected static var _mc:MovieClip = new MovieClip();
public var isPlaying:Boolean = false;
public var obj:Object = null;
public var prop:String = "";
public var func:Function = function (t:Number, b:Number, c:Number, d:Number):Number { return c*t/d + b; }
public var begin:Number = NaN;
public var change:Number = NaN;
public var useSeconds:Boolean = false;
public var prevTime:Number = NaN;
public var prevPos:Number = NaN;
public var looping:Boolean = false;
private var _duration:Number = NaN;
private var _time:Number = NaN;
private var _fps:Number = NaN;
private var _position:Number = NaN;
private var _startTime:Number = NaN;
private var _intervalID:uint = 0;
private var _finish:Number = NaN;
private var _timer:Timer = null;
public function get time():Number
{
return this._time;
}
public 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.dispatchEvent(new TweenEvent(TweenEvent.MOTION_LOOP, this._time, this._position));
} else {
if (this.useSeconds) {
this._time = this._duration;
this.update();
}
this.stop();
this.dispatchEvent(new TweenEvent(TweenEvent.MOTION_FINISH, this._time, this._position));
}
} else if (t < 0) {
this.rewind();
this.update();
} else {
this._time = t;
this.update();
}
}
public function get duration():Number
{
return this._duration;
}
public function set duration(d:Number):void
{
this._duration = (d <= 0) ? Infinity : d;
}
public function get FPS():Number
{
return this._fps;
}
public function set FPS(fps:Number):void
{
var oldIsPlaying:Boolean = this.isPlaying;
this.stopEnterFrame();
this._fps = fps;
if (oldIsPlaying)
{
this.startEnterFrame();
}
}
public function get position():Number
{
return this.getPosition(this._time);
}
public function set position(p:Number):void
{
this.setPosition (p);
}
public function getPosition(t:Number=NaN):Number
{
if (isNaN(t)) t = this._time;
return this.func (t, this.begin, this.change, this._duration);
}
public function setPosition(p:Number):void
{
this.prevPos = this._position;
if (this.prop.length)
this.obj[this.prop] = this._position = p;
this.dispatchEvent(new TweenEvent(TweenEvent.MOTION_CHANGE, this._time, this._position));
}
public function get finish():Number
{
return this.begin + this.change;
}
public function set finish(value:Number):void
{
this.change = value - this.begin;
}
function Tween(obj:Object, prop:String, func:Function, begin:Number, finish:Number, duration:Number, useSeconds:Boolean=false)
{
if (!arguments.length) return;
this.obj = obj;
this.prop = prop;
this.begin = begin;
this.position = begin;
this.duration = duration;
this.useSeconds = useSeconds;
if (func is Function) this.func = func;
this.finish = finish;
this._timer = new Timer(100);
this.start();
}
public function continueTo(finish:Number, duration:Number):void {
this.begin = this.position;
this.finish = finish;
if (!isNaN(duration))
this.duration = duration;
this.start();
}
public function yoyo():void
{
this.continueTo(this.begin, this.time);
}
protected function startEnterFrame():void
{
if (isNaN(this._fps))
{
_mc.addEventListener(Event.ENTER_FRAME, this.onEnterFrame, false, 0, true);
}
else
{
var milliseconds:Number = 1000 / this._fps;
this._timer.delay = milliseconds;
this._timer.addEventListener(TimerEvent.TIMER, this.timerHandler, false, 0, true);
this._timer.start();
}
this.isPlaying = true;
}
protected function stopEnterFrame():void
{
if (isNaN(this._fps))
{
_mc.removeEventListener(Event.ENTER_FRAME, this.onEnterFrame);
}
else
{
this._timer.stop();
}
this.isPlaying = false;
}
public function start():void
{
this.rewind();
this.startEnterFrame();
this.dispatchEvent(new TweenEvent(TweenEvent.MOTION_START, this._time, this._position));
}
public function stop():void
{
this.stopEnterFrame();
this.dispatchEvent(new TweenEvent(TweenEvent.MOTION_STOP, this._time, this._position));
}
public function resume():void
{
this.fixTime();
this.startEnterFrame();
this.dispatchEvent(new TweenEvent(TweenEvent.MOTION_RESUME, this._time, this._position));
}
public function rewind(t:Number=0):void
{
this._time = t;
this.fixTime();
this.update();
}
public function fforward():void
{
this.time = this._duration;
this.fixTime();
}
public function nextFrame():void
{
if (this.useSeconds)
this.time = (getTimer() - this._startTime) / 1000;
else
this.time = this._time + 1;
}
protected function onEnterFrame(event:Event):void
{
this.nextFrame();
}
protected function timerHandler(timerEvent:TimerEvent):void
{
this.nextFrame();
timerEvent.updateAfterEvent();
}
public function prevFrame():void
{
if (!this.useSeconds) this.time = this._time - 1;
}
private function fixTime():void
{
if (this.useSeconds)
this._startTime = getTimer() - this._time*1000;
}
private function update():void
{
this.setPosition(this.getPosition(this._time));
}
}
}
不知大家看的如何,反正我现在来告诉你结果,你会发现,实际这个类很简单,他就做了一件事,就是每个时间变化每个不同的状态,而具体怎么变的,谁看到了?比如加速度,弹簧效果等都应该有算法,但是这里面并没有看到算法啊,只看到他每次更改时间time不管如何,总会update()一下,算法就在这,它会调用getPosition方法,而该方法返回的值是this.func (t, this.begin, this.change, this._duration)(插播参数讲解,func的4个参数分别是,当前运动到的time值,初始值即构造函数中第4个参数,要改变的值即结束值减初始值,总时间即构造函数中第6个参数)func方法得到的就是变化一下time之后的物体值,而这个func就是构造函数中第三个参数Regular.easeOut,这个参数是fl.transitions.easing包中的某个类的某个方法,如果使用方法,返回的值就是return -c * (t /= d) * (t - 2) + b;这个就是缓冲算法,fl.transitions.easing包中还有很多不同移动效果的算法,比如弹簧,加速度等。竟然看到这里,大家都知道了Tween只不过是调用这些算法的一个东西罢了,那么我们根据自我需求写一些简单的缓冲类,然后调用adobe的这些精髓算法呢?
先看看官方的算法源代码
adobe官方fl.transitions.easing.Regular类,源代码:
package fl.transitions.easing
{
public class Regular
{
public static function easeIn(t:Number, b:Number,
c:Number, d:Number):Number
{
return c * (t /= d) * t + b;
}
public static function easeOut(t:Number, b:Number,
c:Number, d:Number):Number
{
return -c * (t /= d) * (t - 2) + b;
}
public static function easeInOut(t:Number, b:Number,
c:Number, d:Number):Number
{
if ((t /= d / 2) < 1)
return c / 2 * t * t + b;
return -c / 2 * ((--t) * (t - 2) - 1) + b;
}
}
}
{
public class Regular
{
public static function easeIn(t:Number, b:Number,
c:Number, d:Number):Number
{
return c * (t /= d) * t + b;
}
public static function easeOut(t:Number, b:Number,
c:Number, d:Number):Number
{
return -c * (t /= d) * (t - 2) + b;
}
public static function easeInOut(t:Number, b:Number,
c:Number, d:Number):Number
{
if ((t /= d / 2) < 1)
return c / 2 * t * t + b;
return -c / 2 * ((--t) * (t - 2) - 1) + b;
}
}
}
接下来看看,我为了某个项目,赶时间写出来针对显示对象一个非常简单的缓冲类,然后调用了官方的fl.transitions.easing包中的算法
package index.item.pairBumping{
import flash.display.DisplayObject;
import flash.events.Event;
import flash.events.EventDispatcher;
public class Motion extends EventDispatcher{
private var _target:DisplayObject;
private var proNum:Number;
private var startNum:Number;
private var endNum:Number;
private var actionStr:String;
private var num1:uint;
private var num2:uint;
private var func:Function;
//构造函数与Tween基本上一样,只不过没有按时间计算,只有按帧运动
//每个参数所表示的值也是一样的,fun:Function传入的参数和Tween一样,使用官方的fl.transitions.easing包
public function Motion(target:DisplayObject,str:*,fun:Function,_start:Number = 0,_end:Number = 1,_pro:Number = 4){
actionStr = str;
_target = target;
proNum = _pro;
startNum = _start;
endNum = _end;
func = fun;
}
//创建Motion实例化后,并没有立即播放得执行play才播放,当然播放完一次,也能使用play继续播放
public function play(){
stop();
num1 = 0;
_target[actionStr] = startNum;
_target.addEventListener(Event.ENTER_FRAME,fun1);
}
//顺走所执行事件
private function fun1(e:Event){
var t = num1 ++;//当前运行时间
var d = proNum;//总时间
var b = startNum;//开始值
var c = endNum - startNum;//要改变的值
_target[actionStr] = func(t,b,c,d);//调用官方算法,并且传入4个参数,进行计算!
if(t > d){//判断是否时间到了
stop();//ok,播放完毕,那么我们停止吧
_target[actionStr] = endNum;//并且把参数强制性变成最终值
}
}
//反过来播放一次
public function back(){
stop();
num2 = 0;
_target[actionStr] = endNum;
_target.addEventListener(Event.ENTER_FRAME,fun2);
}
//反过来播放的执行事件
private function fun2(e:Event){
var t = num2 ++;
var d = proNum;
var b = endNum;
var c = startNum - endNum;
_target[actionStr] = func(t,b,c,d);
if(t > d){
stop();
_target[actionStr] = startNum;
}
}
//停止播放
public function stop(){
_target.removeEventListener(Event.ENTER_FRAME,fun1);
_target.removeEventListener(Event.ENTER_FRAME,fun2);
dispatchEvent(new Event("stop"));
}
}
}
import flash.display.DisplayObject;
import flash.events.Event;
import flash.events.EventDispatcher;
public class Motion extends EventDispatcher{
private var _target:DisplayObject;
private var proNum:Number;
private var startNum:Number;
private var endNum:Number;
private var actionStr:String;
private var num1:uint;
private var num2:uint;
private var func:Function;
//构造函数与Tween基本上一样,只不过没有按时间计算,只有按帧运动
//每个参数所表示的值也是一样的,fun:Function传入的参数和Tween一样,使用官方的fl.transitions.easing包
public function Motion(target:DisplayObject,str:*,fun:Function,_start:Number = 0,_end:Number = 1,_pro:Number = 4){
actionStr = str;
_target = target;
proNum = _pro;
startNum = _start;
endNum = _end;
func = fun;
}
//创建Motion实例化后,并没有立即播放得执行play才播放,当然播放完一次,也能使用play继续播放
public function play(){
stop();
num1 = 0;
_target[actionStr] = startNum;
_target.addEventListener(Event.ENTER_FRAME,fun1);
}
//顺走所执行事件
private function fun1(e:Event){
var t = num1 ++;//当前运行时间
var d = proNum;//总时间
var b = startNum;//开始值
var c = endNum - startNum;//要改变的值
_target[actionStr] = func(t,b,c,d);//调用官方算法,并且传入4个参数,进行计算!
if(t > d){//判断是否时间到了
stop();//ok,播放完毕,那么我们停止吧
_target[actionStr] = endNum;//并且把参数强制性变成最终值
}
}
//反过来播放一次
public function back(){
stop();
num2 = 0;
_target[actionStr] = endNum;
_target.addEventListener(Event.ENTER_FRAME,fun2);
}
//反过来播放的执行事件
private function fun2(e:Event){
var t = num2 ++;
var d = proNum;
var b = endNum;
var c = startNum - endNum;
_target[actionStr] = func(t,b,c,d);
if(t > d){
stop();
_target[actionStr] = startNum;
}
}
//停止播放
public function stop(){
_target.removeEventListener(Event.ENTER_FRAME,fun1);
_target.removeEventListener(Event.ENTER_FRAME,fun2);
dispatchEvent(new Event("stop"));
}
}
}
发表评论
-
利用flashvars给flash传值
2009-09-03 13:44 4411//js部分 var flashvar ... -
继承FormItem实例
2009-08-27 15:36 1315/*******FromItemWithButton 类*** ... -
skin
2009-08-27 09:44 1195创建Skin可以继承自各个skin(见帮助) 如:继承But ... -
flex状态及动画
2009-08-26 15:51 3301切换base状态:currentState=''(注意是两个单 ... -
块布局(constraintColumns、constrainRows)
2009-08-25 14:40 1631label控件不支持换行,text控件支持换行,text控件设 ... -
ExX过滤XML数据
2009-08-20 16:49 968XMLListCollection的filterFunctio ... -
flex安全沙箱设置
2009-08-19 18:00 21021 、 编绎参数 -use-network=false( ... -
flex格式化数据
2009-08-13 17:34 1208一、格式化数据 1、建立mx标签 <mx:Dat ... -
flex需要记住的一些东西
2009-08-10 18:05 1535一、Application常用的事件 initializ ... -
flex4 注意事项
2009-08-07 16:46 14401、自定义控件加载。 flex3中自定义控件,加载时直接 ... -
flex指定区域拖动
2009-07-21 16:43 3270在flex经常会指定某个可拖动对象在可拖动区域中拖拽,可以指定 ... -
blueprint(代码示例)安装方法
2009-07-06 17:41 12221、选择菜单 帮助-->软件更新-->查找并安装。 ... -
flex 4 布局示例一
2009-06-30 15:48 5237flex4(flex skd4)的布局发生了很大变化,在fle ... -
利用影片剪辑做按钮
2009-05-27 22:34 15841、新建元件---》影片剪辑 2、导入图片,或画一个矩形,此 ... -
FDT更新地址
2009-05-27 22:26 1040http://fdt.powerflasher.com/upd ... -
flex外观设计及时生成效果的css
2009-05-14 12:10 1298flex Style Explorer,可以用图形化界面设置各 ... -
利用Alcon跟踪as的trace信息
2009-05-14 11:25 14881、安装Alcon后,在安装目录的debug/as3下找到al ... -
flex使用filereference+httphandler实现文件上传/下载
2009-05-06 17:51 4517flex使用filereference+httph ... -
Flash在FF下当设置overflow-y:scroll时,失去热点的bug
2009-04-10 17:07 1638今天遇到了一个奇怪的问题,flash在FF下不能点击,所有按钮 ... -
swfobject使用说明
2009-04-09 17:33 6134swfobject.embedSWF(swfUrl, id, ...
相关推荐
flash as3.0动作脚本的一个很经典的缓动函数的as类文件,体积小且易用
《国外经典的31个Flash AS特效(AS3.0)》 Flash ActionScript,简称AS,是Adobe Flash Professional中用于创建交互式内容的核心编程语言。AS3.0是该语言的一个重大更新,它引入了许多新的特性和改进,使得开发者...
在ActionScript 3.0(AS3.0)中,Tween类是动画处理的重要组成部分,它允许开发者平滑地在一段时间内改变对象的属性,如位置、大小、颜色等,从而实现动态效果。Tween(补间)技术是基于时间线的动画原理,通过计算...
本教程将详细讲解如何利用Adobe Flash中的ActionScript 3.0(AS3.0)编程语言,创建一个以“十二生肖”为主题的互动学习课件。通过这个课件,学生不仅可以了解到十二生肖的基本知识,还能在互动过程中增强对汉字的...
9. **动作脚本与图形渲染**:利用AS3.0的绘图API,可以实现动态图形绘制,结合Tween类创建平滑过渡效果。 10. **错误处理**:通过try-catch语句,可以捕获并处理运行时错误,提高程序的健壮性。 在压缩包中的...
6. **动画与时间轴控制**:AS3.0提供了强大的动画控制功能,可能通过Tween类或时间轴控制实现拼图块的移动动画。 7. **数据结构与算法**:拼图游戏的核心是拼图的生成与解决,这通常涉及矩阵操作和图论中的算法,如...
AS3.0(ActionScript 3.0)是Adobe Flash平台上的编程语言,主要用于创建交互式网站、游戏、动画以及各种富互联网应用。在本项目中,“as3.0+翻书效果”指的是使用AS3.0实现的一种模拟真实书籍翻页效果的动态功能。...
AS3.0(ActionScript 3.0)是Adobe Flash平台上的主要编程语言,用于创建交互式内容、动画以及丰富的互联网应用程序(RIA)。基于AS3.0的小游戏,利用了其强大的性能和丰富的功能,为用户提供有趣且引人入胜的游戏...
《深入探索Flash AS3.0:18个经典实例解析》 Flash ActionScript 3.0(AS3.0)是Adobe Flash平台的核心编程语言,它为开发者提供了强大的功能,用于创建互动式网页内容、游戏以及丰富的互联网应用程序(RIA)。在AS...
4. **优化交互**:为了提供更好的用户体验,可以考虑添加缓动效果,如渐变显示和隐藏,这可以通过TweenMax库或其他类似库实现,或者通过AS3.0的内置Tween类来完成。 在实际项目中,可能还需要处理其他细节,比如...
在本文中,我们将深入探讨如何在Flash AS3.0中实现图片的随机过渡效果。这一技术主要用于提升用户体验,为数字媒体展示、网页设计或者互动应用增添动态视觉效果。以下是关于这个主题的一些关键知识点: 1. **AS3.0...
ActionScript 3.0(AS3.0)是Adobe Flash平台上的主要编程语言,用于创建交互式内容、动画以及富互联网应用程序(RIA)。这个“AS 3.0中文帮助文档”是一个网页形式的资源,旨在为中国的开发者提供关于AS3.0的详细...
1. **时间轴控制**:AS3.0中的` Tween`类或`Timeline`类允许我们控制舞台上元件的动画效果。通过改变元件的位置、旋转或缩放属性,可以实现平滑的滚动效果。 2. **动作脚本编写**:在Flash Professional的...
在ActionScript 3.0(AS3.0)中,创建动态和流畅的动画效果是许多开发者关注的重点。`TweenMax` 是GreenSock Animation Platform (GSAP)的一部分,它是一个极其强大的缓动库,为AS3.0提供了丰富的动画解决方案。`...
在IT行业中,动画效果是提升用户体验的...掌握缓动特效的原理和实现方法,可以提升Flash应用的视觉效果和用户体验,对于AS3.0开发者来说是必备技能。通过不断学习和实践,你可以创造出更多富有创意和吸引力的动画效果。
AS3.0(ActionScript 3.0)是Adobe Flash Professional和Flex Builder等工具中使用的编程语言,用于创建交互式内容。以下是10种不同的图片切换随机效果,以及如何在AS3.0中实现它们的基本概念。 1. **淡入淡出**:...
2. 动画和效果:利用Tween类或Timeline-based动画,可以创建平滑的界面过渡和视觉反馈。 四、音乐播放逻辑 1. 加载音乐:使用Sound类的load方法加载音乐文件,可以指定URL或从库中选择。 2. 播放控制:使用...
AS3.0(ActionScript 3.0)是Adobe Flash平台中的编程语言版本,它在2006年随着Flash Player 9一同发布,带来了显著的性能提升和更严格的面向对象编程模型。AS3.0的语法更加现代化,与ECMAScript 4紧密相关,提升了...
4. 动画和物理效果:游戏中的运动效果和球之间的碰撞,可以通过AS3.0的Tween和物理引擎库来实现。 三、源码结构分析 在压缩包中的"zuma"文件夹中,我们可能看到以下关键文件: 1. Main.as:这是游戏的主入口点,...
要实现翻转效果,我们需要了解基本的AS3.0语法,如类、对象、事件处理和图形绘制。 2. **舞台与显示对象** 在AS3.0中,所有可视元素都是DisplayObject的实例,如MovieClip和Sprite。我们将创建一个或多个显示对象...