暑期 as3 脚本编程系列讲座教案四 关联数组、显示对象

      Flash学习笔记 2008-7-14 14:33

一、关联数组

用名称元素作为索引的数组 称为 关联数组。

通常的各种类都可以看做是关联数组。

例如:

var mc = new Sprite();

对于mc 的属性我们可以这样来访问

mc.x = 20;

mc.y = 50;

也可以用数组的形式来访问

mc["x"] = 20;

mc["y"] = 50;

使用 for  in 语句可以对 对象中的定义属性进行输出。例如,场景中有一个rect 元件,下面的代码中只输出了算定义的属性。

rect.x = 100;
rect["y"] = 0;
rect.xx = 50;
rect["yy"] = 100;
for( var s:String  in  rect){
 trace( s + ":" + rect[s]);
}

输出

xx: 50

yy:100

二、关于“可视化对象列表”

可视化对象列表 有三种形式:stage(舞台)、可视化对象容器、可视化对象。

我们不必太拘泥于这个名词,可以将这个列表看做是可视化对象内置的一种机制,当在可视化对象中添加新的子对象实例时,列表中就会自动的加入相关子类的信息,并进行刷新。

向列表中添加或删除对象使用下面的函数:

addChild()   addChildAt()

removeChild()   removeChildAt()

默认情况下,新添加的总是在最上层,向指定的某层添加对象以后,该层原有内容向上层移动,相当于“插入”到指定层中去。若反复添加的是同一个对象,则该层中仅保留最后的一次,前面添加的会被删除掉。

删除某一层的对象后,上层的对象会自动向下移动一层。

最高层深等于 numChildren -1 , numChildren 是总的层数。

全部删除用 removeAllChildren() 方法,方法位于 asc.util.DisplayObjectUtilities ,属于一个静态方法,调用方式为

DisplayObjectUtilities.removeAllChildren( this );

设置或改变 对象所处的层深用: setChildIndex( )   getChildIndex( )   getChildAt( )

下面的代码用来将最底层(零层)的对象“搬”到最高层(numChildren -1 )中去,底层“搬”空以后,上面的层依次下降一层,而不是直接的让底层与最上层进行交换。

setChildIndex( getChildAt(0), numChildren - 1 );

提示:如需将创建可视化对象的类 链接为 flash9 的文档类时,自定义类的基类至少是 MovieClip ,如为 Sprite 则会报错。

三、简单按钮

利用简单按钮中的四个状态,可以指定在具体某个状态下需要显示的内容(包括动态的内容)。

简单按钮的四种状态

upState  代表按钮默认 状态的对象,当鼠标不在按钮上,按钮就处于这个状态。
overState  当鼠标移动到按钮上时按钮的状态,鼠标离开时按钮又回到 状态。
downState  当鼠标按下左键时所处的状态
hitTestState  这个状态定义按钮的界限,只是用来跟踪鼠标的目的。

下面类文件演示了简单按钮的创建和设置方法。

package {
  import flash.display.*;
  import flash.events.*;

  public class SimpleButtonDemo extends MovieClip {
    public function SimpleButtonDemo(  ) {
      // Create a simple button and configure its location
      var button:SimpleButton = new SimpleButton(  );
      button.x = 20;
      button.y = 20;
     
      // Create the different states of the button, using the
      // helper method to create different colors circles
      button.upState = createCircle( 0x00FF00, 15 );
      button.overState = createCircle( 0xFFFFFF, 16 );
      button.downState = createCircle( 0xCCCCCC, 15 );
      // button.hitTestState = button.upState;
     
      // Add an event listener for the click event to be notified
      // when the user clicks the mouse on the button
      button.addEventListener( MouseEvent.CLICK, handleClick );
     
      // Finally, add the button to the display list
      addChild( button ); 
    }
   
    // Helper function to create a circle shape with a given color
    // and radius
    private function createCircle( color:uint, radius:Number ):Shape {
      var circle:Shape = new Shape(  );
      circle.graphics.lineStyle( 1, 0x000000 );
      circle.graphics.beginFill( color );
      circle.graphics.drawCircle( 0, 0, radius );
      circle.graphics.endFill(  );
      return circle;
    }
   
    // Event handler invoked whenever the user presses the button
    private function handleClick( event:MouseEvent ):void {
      trace( "Mouse clicked on the button" ); 
    }
  }
}
因为按钮功能是经常需要用的,所以flash 提供了一个简化版的按钮类,这样可以省去逐个事件进行侦听的过程,直接将每个事件中需要显示的内容进行指定即可。

标签集:TAGS:
回复Comments() 点击Count()

回复Comments

{commentauthor}
{commentauthor}
{commenttime}
{commentnum}
{commentcontent}
作者:
{commentrecontent}