**10--用计时器控制影片的运动.txt ***** **
FLASHAS3.0—用计时器控制影片的运动(12) 2.3.2 用计时器控制影片的运动 计时器,就好比我们使用的钟表。你还可以创建一个计时器,每秒用它来调用一个函 数。当你声明一个计时器后也就创建了一个 Timer 对象,你需要设置时间间隔的毫秒数,还 有循环次数,为 0 的话就是循环无数次。
* 下面代码创建一个 Timer 对象,每隔 1S 就触发调用一次 timerFunction 函数,源代码 如下:
* // 创建一个 Timer 对象,每秒调用一次 timerFunction 函数 * var myTimer:Timer = new Timer(1000);
* myTimer.addEventListener(TimerEvent.TIMER, timerFunction); * // 函数内为画一黑色填充圆点
* function timerFunction(event:TimerEvent) * { * this.graphics.beginFill(0x000000);
* //currentCount 为计时器从 0 开始后触发的总次数。 如果已重置了计 时器,则 只会计入重置后的触发次数。
* this.graphics.drawCircle(event.target.currentCount*10,100,4); * }
* // 计时开始 * myTimer.start();
* 上面代码源文件见 UsingTimers.fla。 *
* 另外,你还可以用计时器来完成上节用帧频事件做的动画,全部代码如下:
* var hero:Hero = new Hero(); * hero.x = 100; * hero.y = 200; * addChild(hero);
* var heroTimer:Timer = new Timer(80);
* heroTimer.addEventListener(TimerEvent.TIMER, animateHero); * function animateHero(event:Event) * {
* hero.x += 7;
* if (hero.currentFrame == 8) * {
* hero.gotoAndStop(2); * } else * {
* hero.gotoAndStop(hero.currentFrame+1); * } * }
* heroTimer.start();
* 我们发现,调用函数内部的代码没变,唯一不同的就是侦听器不一样。前面为帧频侦 听, 这里为计时器侦听。 当你测试影片时, 会发现这个人物运动的速度和上面的那么差不多。 如果你再重新设置一下舞台的帧频,比如改为 6 或者 60,会发现该影片运动的速度没有明 显的变化。
* 另: 具体区别就是 ENTER_FRAME 是按帧发生的,Timer 是你可以自定义的时间和循 环次数. ****** *
**11--基于时间的帧频动画.txt ***** **
FLASHAS3.0—基于时间的帧频动画 (13) 2.3.3 基于时间的帧频动画 该方法的原理就是, 首先声明一个整型变量来存储初始化 flash player 后经过的时间,
然后再用侦听事件来调用侦听函数, 在侦听函数内计算出当前帧与上一帧的时间差, 再乘以 一个比例系数应用到影片剪辑的坐标,从而改变该对象的运动。
* 首先, 现在舞台上绘制一个小球, 转换为影片剪辑, 并把它从库中拖放到舞台的左边, 实例名称为 ball。
* 打开主时间轴->动作,在脚本编辑区内,输入下面的代码。先声明
一个变量来存储 初始化 flash player 后经过的时间,该时间以毫秒为单位的,再通过 getTimer()函数,把返回 的时间传递給刚才声明的变量 lastTime。
* var lastTime:int=getTimer() * // trace(\
* 然后, 我们用 ENTER_FRAME 事件来侦听, 并声明一个 animateBall 侦听函数来调用。
* addEventListener(Event.ENTER_FRAME, animateBall);
* 在下面的这个函数内,第一行代码:先用 getTimer()函数得到系统当前帧的时间, 并把该时间与上一帧的时间差赋值給一个整型变量 timeDiff;第二行代码:更新 lastTime 时 间,供下一次侦听函数被调用时使用;第三行代码:把该时间差乘以一个 0.1 系数作为小球 横坐标的变化位置。比如,先在舞台属性中设置帧频为 10,也就是说,影片在运行时,每 帧所用的时间大概是 100ms, 比如 flash player 初始化经过的时间为 5ms, lastTime 初始值 则 就为 5; 当运行到下一帧时将触发侦听器调用 animateBall 函数, 也就是说, 其中间隔了 100ms, 即 timeDiff 为 100ms,更新后的 lastTime 为 105ms,下面小球水平位置增加了 10 像素。也 就是说,每经过一秒钟小球的水平位置就向右移动了 100 像素。 * function animateBall(event:Event) { * // trace(\* var timeDiff:int = getTimer()-lastTime;

