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

时间:2011-06-04 03:31:27

标签: flash

我会在要求清晰的部分放置一个“#”标志! 这是此链接的代码 http://www.emanueleferonato.com/2008/05/02/creation-of-a-matching-game-with-flash-and-as3/

我知道这个链接详细解释了但我仍然没有代码的某些部分 哈哈

包{

    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);
    }
}

}

2 个答案:

答案 0 :(得分:0)

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

第二个问题,“颜色是什么意思?”是一个类型演员。 event.current target只是一个通用对象,就flash而言,并且尝试将泛型对象分配给声明为特定类型的变量会导致编译器错误。通过转换对象(告诉编译器您知道该对象应该是什么),可以消除错误。

答案 1 :(得分:0)

Line 16: Assigning an attribute to the tile called col that represent the color of the tile 这是TimeLine中的颜色数。!

您可以将.col更改为.mu,如您所见,此文件可以使用!