Flash 关于在actionscript 3中添加属性的问题

Flash 关于在actionscript 3中添加属性的问题,flash,Flash,我会在我要求清楚的地方贴个标志! 这是来自此链接的代码 我知道这个链接详细地解释了它,但我仍然不知道代码的某些部分 哈哈 包{ import flash.display.Sprite; import flash.events.MouseEvent; import flash.events.TimerEvent; import flash.utils.Timer; public class color_match extends Sprite { private va

我会在我要求清楚的地方贴个标志! 这是来自此链接的代码

我知道这个链接详细地解释了它,但我仍然不知道代码的某些部分 哈哈

包{

    import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.events.TimerEvent;
import flash.utils.Timer;

    public class color_match extends Sprite {

    private var first_tile:colors;
    private var second_tile:colors;
    private var pause_timer:Timer;
    var colordeck:Array = new Array(1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8);
    public function color_match() {
        for (x=1; x<=4; x++) {
            for (y=1; y<=4; y++) {
        var random_card = Math.floor(Math.random()*colordeck.length);
                var tile:colors = new colors();
                                   //why is .col attribute not declared?
                                    //#
                     tile.col = colordeck[random_card];
                colordeck.splice(random_card,1);
                tile.gotoAndStop(9);
                tile.x = (x-1)*82;
                tile.y = (y-1)*82;
                tile.addEventListener(MouseEvent.CLICK,tile_clicked);
                addChild(tile);
            }
        }
    }
    public function tile_clicked(event:MouseEvent) {
                     //what does "as colors" suppose to mean here, can i just omit it?, 
                    //does the type of any display obj with event.currentTarget/target
                    //generates a type OBJECT                                 
                    //#
        var clicked:colors = (event.currentTarget as colors);
        if (first_tile == null) {
            first_tile = clicked;
            first_tile.gotoAndStop(clicked.col);
        }
        else if (second_tile == null && first_tile != clicked) {
            second_tile = clicked;
            second_tile.gotoAndStop(clicked.col);
            if (first_tile.col == second_tile.col) {
                pause_timer = new Timer(1000,1);
                pause_timer.addEventListener(TimerEvent.TIMER_COMPLETE,remove_tiles);
                pause_timer.start();
            }
            else {
                pause_timer = new Timer(1000,1);
                pause_timer.addEventListener(TimerEvent.TIMER_COMPLETE,reset_tiles);
                pause_timer.start();
            }
        }
    }
    public function reset_tiles(event:TimerEvent) {
        first_tile.gotoAndStop(9);
        second_tile.gotoAndStop(9);
        first_tile = null;
        second_tile = null;
        pause_timer.removeEventListener(TimerEvent.TIMER_COMPLETE,reset_tiles);
    }
    public function remove_tiles(event:TimerEvent) {
        removeChild(first_tile);
        removeChild(second_tile);
        first_tile = null;
        second_tile = null;
        pause_timer.removeEventListener(TimerEvent.TIMER_COMPLETE,remove_tiles);
    }
}

}第一个问题,为什么没有声明.col属性?是因为对象是动态类。这意味着您可以设置对象上任何名称的属性,以便以后检索它们。在本例中,它用于存储一个值,该值稍后将在tile_clicked函数中使用。这可以被称为任何东西,比如tile.myvalue=colordeck[random_card];值得注意的是,使用像这样的动态属性是灵活的,但是您将丢失任何提示IDE的代码

第二个问题,“颜色”是什么意思?这是一个类型转换。就flash所知,event.current目标只是一个泛型对象,尝试将泛型对象分配给声明为特定类型的变量可能会导致编译器错误。通过强制转换对象,告诉编译器您知道该对象应该是什么,可以消除错误。

这是时间轴中的颜色数


您可以将.col更改为i.e..mu,如您所见,此文件将正常工作

顺便说一下,在这个代码中,var tile=新颜色;“颜色”是一个框的movieclip与九个关键帧的链接,每个关键帧表示一个颜色。该类的实例是否可以访问该动态属性(如.col)?任何代码都可以访问它吗?该属性不会自动被任何东西访问,但它是一个公共属性,因此任何引用该对象的代码都可以访问该属性。为了更好地理解,请尝试使用对象,即一切的基类。var o1:对象=新对象;o1.foo=试验;var o2:对象=新对象;o2.bar=试验2;traceo1.foo;//test traceo2.foo;//这将导致空引用错误traceo2.bar;//测试2 traceo1.bar;//这将导致动态属性出现空引用错误,因为它们仅存在于单个实例上。