2006/02/22 | 体验AS3.0(十三)
类别(Flash) | 评论(0) | 阅读(232) | 发表于 07:01
我们已经知道如何设置帧速和场景的大小,我们想在场景中让某些东东动起来。以前,我们可以使用onEnterFrame作用在MovieClip上来达到目的,在AS3.0中,情况发生了变化。就跟我们以前提到的如何用addEventListener激活鼠标事件一样,我们现在只需知道事件的具体名称就可以了。EventType有一个静态成员ENTER_FRAME,这就是我们所需要的。
下面这个例子将创建十个圆并让它们在场景中运动起来。
package {

// use
// -default-size 800 800 -default-frame-rate 31
// as the additional compiler arguments
  
  import flash.events.Event;
  import flash.events.EventType;
  import flash.display.Sprite;

  public class Test extends Sprite {
    
    public function Test() {
      var minSize:Number = 10;
      var maxSize:Number = 50;
      var minSpeed:Number = 20;
      var maxSpeed:Number = 50;
      for( var i:int=0; i<10; i++){
        var mc:MovingCircle = new MovingCircle(
          getRandom( minSize, maxSize),
          getRandom( minSpeed, maxSpeed),
          getRandom( minSpeed, maxSpeed));
        addChild( mc);
      }
    }
    
    private function getRandom( minVal:Number, maxVal:Number):Number{
      return minVal + Math.random() * (maxVal - minVal);
    }
  }
  
  
  
  private class MovingCircle extends Sprite
  {
    
    private var xSpeed:Number;
    private var ySpeed:Number;
    
    public function MovingCircle( size:Number, xSpeed:Number, ySpeed:Number){
      this.xSpeed = xSpeed;
      this.ySpeed = ySpeed;
      createUI( size);
      addEventListener(EventType.ENTER_FRAME, onEnterFrame);
    }
    
    private function createUI( size:Number){
      graphics.beginFill(Math.floor(Math.random() * 0xffffff));
      graphics.drawCircle(-size/2, -size/2, size);
      graphics.endFill();
    }
    
    private function onEnterFrame( evt:Event):Void{
      x += xSpeed;
      y += ySpeed;
      if( x < 0){
        x = Math.abs(x);
        xSpeed *= -1;
      } else if( x > stage.stageWidth){
        x = stage.stageWidth - (x - stage.stageWidth);
        xSpeed *= -1;
      }
      if( y < 0){
        y = Math.abs(y);
        ySpeed *= -1;
      } else if( y > stage.stageHeight){
        y = stage.stageHeight - (y - stage.stageHeight);
        ySpeed *= -1;
      }
    }
  }
}
既然我们不想让这些圆运动到场景以外,我们只要用场景的尺寸加以限制就可以了。从stage的属性中我们可以获取它的大小,并不需要另外建立一个常量。
0

评论Comments

日志分类
首页[186]
Flash[84]
FMS[41]
AIR[2]
ASP[11]
作品区[12]
其他[36]