2011-06-04 91 views
0

我会在要求清晰的部分放置一个“#”号! 这是从这个链接的代码 http://www.emanueleferonato.com/2008/05/02/creation-of-a-matching-game-with-flash-and-as3/关于在actionscript中添加属性的问题3

我知道这个链接的详细解释,但我还是不代码 哈哈

包{

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

}

的某些部分
+0

在这个代码中的方式 var tile = new colors(); 颜色是一个盒子的动画片段与九个关键帧的链接,每个关键帧表示一个颜色 – christian 2011-06-04 03:47:58

回答

0

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

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

+0

这个动态属性如.col可以被该类别的一个实例访问吗? 并且它可以被任何代码访问? – christian 2011-06-04 04:22:40

+0

该属性不会被任何东西自动访问,但它是一个公共属性,因此任何具有对该对象的引用的代码都将能够访问该属性。 为了更好地理解,请尝试使用Object,基类的一切东西。 'var o1:Object = new Object(); o1.foo =“test”; var o2:Object = new Object(); o2.bar =“test 2”; trace(o1.foo); // test trace(o2.foo); //这将导致空引用错误 trace(o2.bar); // test 2 trace(o1.bar); //这将导致空引用错误' 使用动态属性,它们只存在于单个实例上。 – HotN 2011-06-04 17:30:11