3


我想通過flash + actionscript製作一個簡單的卡片匹配遊戲,並且在分配事件偵聽器和名稱時遇到了很大的麻煩。我已經獲得了所有卡片生成語句,並且它們都繪製在我的舞臺上,但即使我將它們的實例名稱分配給了newCard.name,但在跟蹤點擊時獲得的名稱始終是每個單一按鈕上的「root1」我不知道爲什麼。

在點擊處理程序中訪問.name屬性

package { 
import flash.display.MovieClip; 
import flash.events.MouseEvent; 

public dynamic class cardGameMain extends MovieClip { 

    public function cardGameMain() { 
     addCards(); 
    } 
    public function addCards() { 
     var lastCard:int; 
     for (var i = 1; i < 17; i++) { 
      var newCard:MovieClip; 
      newCard = new cardBackSymbol(); 
      newCard.name = "card" + i; 
      addChild(newCard); 
      newCard.addEventListener(MouseEvent.MOUSE_UP, decideCard); 
      if (i == 1 || i == 5 || i == 9 || i == 13) { 
       newCard.x = 20; 
       if (i == 1) { 
        newCard.y = 20; 
       } 
       else if (i == 5) { 
        newCard.y = 240; 
       } 
       else if (i == 9) { 
        newCard.y = 460; 
       } 
       else if (i == 13) { 
        newCard.y = 680; 
       } 
       lastCard = 20; 
      } else if (i > 1 && i < 5) { 
       newCard.x = lastCard + 145; 
       newCard.y = 20; 
       lastCard = lastCard + 145; 
      } else if (i > 5 && i < 9) { 
       newCard.x = lastCard + 145; 
       newCard.y = 240; 
       lastCard = lastCard + 145; 
      } else if (i > 9 && i < 13) { 
       newCard.x = lastCard + 145; 
       newCard.y = 460; 
       lastCard = lastCard + 145; 
      } else { 
       newCard.x = lastCard + 145; 
       newCard.y = 680; 
       lastCard = lastCard + 145; 
      } 
      trace(newCard.name + " position is " + newCard.x + ", " + newCard.y); 
     } 
    } 

    public function decideCard(e:MouseEvent):void { 
     trace(this.name) 
    } 
} 

}

對此事的任何幫助深表appretiated!

回答

1

您正在使用this關鍵字引用包含的類,而不是單擊的對象。

試試這個:

public function decideCard(e:MouseEvent):void { 
    trace(DisplayObject(e.currentTarget).name) 
} 
+0

@倫敦藥房,mediaservices太謝謝你了!我不得不稍微改變它,並用MovieClip替換DisplayObject,它完美的工作!

只是一個簡短的問題,而我在這裏,最終在decisionCard函數內,我將使用該名稱從數組中調用某些東西。如果我這樣做,將以同樣的方式工作? (例如if(MovieClip(e.currentTarget).name == card1)) – user1801301

+0

@ user1801301 - 奇怪的是,name屬性是從DisplayObject繼承的,所以它應該可以工作,但無論如何...在判斷函數中回答你的問題該行會起作用(假設你在引號中使用「card1」,因爲它是你評估的字符串) – BadFeelingAboutThis

+0

@ londondrugs-mediaservices真棒,非常感謝! – user1801301

相關問題