Flash AS3.0教程:学习帧循环的运用

作者:网络 来源:佚名 更新时间:2009-10-21 22:19:10 点击:

本例为flash as3.0菜鸟学飞系列教程,在上一讲中我们学习了含有多个类的as3类文件的写法,在这一讲中我们来学习帧循环的运用,希望能给初学flash as编程的朋友带来帮助~~

学习as3菜鸟起飞吧之帧循环

多帧循环

flash中的帧在默认情况下是循环执行的,租用gotoandplay()函数可以实现简单的帧循环,而实现代码的重复执行。
 gotoandplay()函数的用途是控制或改变影片剪辑的播放流程,如果在影片的第1帧画面中放置需要重复执行的程序,然后在第2帧加入gotoandplay(1)语句。反复执行第1帧画面的程序,那么gotoandplay()函数就构成了一个循环程序结构。
 gotoandplay()函数没有条件判断功能,是无条件重复的循环结构。但可以和if语句一起使用。形成具有判断终止条件功能的循环。

下面用帧循环制作匀速运动:

1、新建flash文档
2、在图层1的第一帧创建一个实例名为mc的影片剪辑实例
3、新建as层,单击第1帧输入代码:
  //得到mc的横坐标
  var dx:number = mc.x;
//定义速度
  var speed:number = 10;
4、在as层的第2帧插入空白帧,输入代码;
  //横坐标加上速度
dx += speed;
//设置mc的横坐标
  mc.x = dx;
5、在as层的第3帧插入空白帧,输入代码:
  //判断是否超出舞台边界
  if(dx < stage.stagewidth)
{
//跳到第2帧并播放
  this.gotoandplay(2);
//如超出舞台的右边界
 } else
{
//停止播放
 this.stop(); 
}

stage是stage类的实例,stage类有名为stagewidth的属性,表示舞台的宽度。

6、测试影片,可以看到影片实例会一直运动到舞台的右边界。

 从测试结果看,影片的运动并不流畅,这与帧频和帧循环结构有关。flash默认帧频是12fps,就是一秒播放12帧。上面的程序由于使用了帧跳转语句,实际需要每播放两帧才会执行第2帧的代码一次,这就是说第2帧的代码执行频率是6fps,所以动画效果会显得不流畅。

图层结构图示:

flash as3.0教程:学习帧循环的运用_网页设计

上面的例子执行代码的速度只有帧频的一半,而且代码分散,不适合制作复杂的应用程序。我们可以利用enterframe事件以帧频的速度执行代码,而且代码可以集中在一帧。

用enterframe事件制作匀速运动:

1、新建flash文档
2、在图层1创建一个实例名为mc的影片剪辑
3、新建as图层,单击第1帧,输入代码:
  //动态更改帧频
  stage.framerate = 30;
//获取mc初始位置
  var dx:number = mc.x;
//定义速度
  var speed:number = 5;
//注册侦听器
  mc.addeventlistener(event.enter_frame,onmove);
//定义事件接收函数
  function onmove(e:event)
{
//坐标加速度
    dx += speed;
//影片剪辑的坐标
   e.target.x = dx; 
//如果影片运动到舞台右边界
   if(ds > stage.stagewidth)
{
//移除enterframe事件
    mc.removeeventlistener(event.enter_frame,onmove);
}
}

代码使用了event类的enter_frame属性,接收函数中参数e是event类的实例,它具有target属性,target表示事件发送者mc。

4、测试影片
使用enterframe事件可实现代码的重复执行,它执行的速度与帧频有关。
提示:当不需要使用enterframe事件时,一定要用removeeventlistener()函数来删除enterframe事件。