2011-11-15 11 views
1

私はボタンを持っています。リスナーはメインにあります。 私はクリックしたインスタンスを見つけようとしていますので、薬の価格を選んで購入することができます。私がクリックした6つのインスタンスのうちどれを見つけようとしていますか?

MAIN.AS

//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 


package 
{ 
     import flash.display.Sprite; 
     import flash.events.Event; 
     import flash.events.MouseEvent; 

     /** 
     * ... 
     * @author MindGem 
     */ 
     public class Main extends Sprite 
     { 
       private var drug:Drug; 
       private var cash:Cash; 
       private var drugNames:Array = ["Ganja", "Khat", "Extacy", "Amphetamine", "Dopamine", "Heroin", "Cocaine"]; 
       private var drugPrices:Array = [5, 10, 15, 20, 30, 50, 75]; 
       private var randomDrugPrice:uint; 
       private var drugCollection:Vector.<Drug>; 

       public function Main():void 
       { 
         drugCollection = new Vector.<Drug>; 

         for (var i:int = 0; i < drugNames.length; i++) 
         { 
           randomDrugPrice = Math.random() * (i*5) + drugPrices[i]; 
           drug = new Drug(); 
          addChild(drug); 
           drugCollection.push(drug); 
          drug.setName(drugNames[i]); 
          drug.setPrice(randomDrugPrice); 
           drug.x = 0; 
           drug.y = (i * 24); 
          drug.buy.addEventListener(MouseEvent.CLICK, BuyDrug); 
         } 


         cash = new Cash(); 
         addChild(cash); 
         cash.x = 100; 
         cash.y = 200; 
       } 

       public function BuyDrug(e:MouseEvent):void 
       { 
        //How can I find out the price or id of the clicked instance? 

私がクリックしたどのインスタンスを見つける必要があるところです。 今、私はDrug/e.currentTargetを試しました。).getPrice()、私はベクトル内のインスタンス をプッシュしようとしました。

ボタンの代わりにクラス自体にリスナーを置くことができますが、それは全体の クラスをクリック可能にし、そこにテキストフィールドを持っています。私はこれによって影響を受けたくありません。 何ができますか?

   } 

     } 

} 



//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 

DRUG.AS 




package 
{ 
     import flash.display.MovieClip; 
     import flash.display.Sprite; 
     import flash.text.TextField; 
     import flash.text.TextFieldType; 
     import flash.text.TextFormat; 

     /** 
     * ... 
     * @author MindGem 
     */ 
     public class Drug extends Sprite 
     { 
       private var drugNameContainer:MovieClip; 
       private var drugNameText:TextField; 

       private var drugPriceContainer:MovieClip; 
       private var drugPriceText:TextField; 
       private var textDesigner:TextFormat; 

       private var buyDrugText:TextField; 
       public var buy:MovieClip; 
       private var buyLabel:TextField; 

       private var price:uint = 12; 
       private var drugName:String = "Cocaine"; 

       public function Drug() 
       { 
         buyLabel = new TextField(); 
         drugNameContainer = new MovieClip(); 
         drugPriceContainer = new MovieClip(); 
         buy = new MovieClip(); 
         buyDrugText = new TextField(); 
         textDesigner = new TextFormat(); 
         drugNameText = new TextField(); 
         drugPriceText = new TextField(); 

         textDesigner.align = "right"; 
         textDesigner.font = "_sans"; 
         textDesigner.size = 13; 

         drugNameContainer.graphics.beginFill(0xeeeeee); 
         drugNameContainer.graphics.lineStyle(1, 0xbbbbbb); 
         drugNameContainer.graphics.drawRoundRect(50, 50, 120, 20, 6, 6); 

         drugPriceContainer.graphics.beginFill(0xeeeeee); 
         drugPriceContainer.graphics.lineStyle(1, 0xbbbbbb); 
         drugPriceContainer.graphics.drawRoundRect(175, 50, 50, 20, 6, 6); 

         buy.graphics.beginFill(0x60ce0f); 
         buy.graphics.lineStyle(2, 0x000000); 
         buy.graphics.drawRoundRect(275, 50, 50, 21, 6, 6); 
         buy.buttonMode = true; 

         drugPriceText.x = 120; 
         drugPriceText.y = 51; 

         drugNameText.x = 66; 
         drugNameText.y = 50; 

         buyDrugText.type = TextFieldType.INPUT; 
         buyDrugText.text = "1"; 
         buyDrugText.x = 230; 
         buyDrugText.y = 50; 
         buyDrugText.background = true; 
         buyDrugText.backgroundColor = 0xcccccc; 
         buyDrugText.border = true; 
         buyDrugText.borderColor = 0x000000; 
         buyDrugText.width = 40; 
         buyDrugText.height = 20; 
         buyDrugText.maxChars = 3; 
         buyDrugText.restrict = "0-9"; 
         buyDrugText.setTextFormat(textDesigner); 

         buyLabel.text = "BUY"; 
         buyLabel.x = 217; 
         buyLabel.y = 51; 
         buyLabel.mouseEnabled = false; 
         buyLabel.setTextFormat(textDesigner); 

         addChild(drugNameContainer); 
         addChild(drugPriceContainer); 
         addChild(drugNameText); 
         addChild(buy); 
         addChild(buyDrugText); 
         addChild(drugPriceText); 
         addChild(buyLabel); 

       } 

       public function setName(p_drugName:String):void 
       { 
         drugName = p_drugName; 
         drugNameText.text = drugName; 
         drugNameText.mouseEnabled = false; 
         drugNameText.setTextFormat(textDesigner); 

       } 

       public function setPrice(p_price:uint):void 
       { 
         price = p_price; 
         drugPriceText.text = "$" + price; 
         drugPriceText.mouseEnabled = false; 
         drugPriceText.setTextFormat(textDesigner); 

       } 

       public function getPrice():uint 
       { 
         return uint(buyDrugText.text)*price; 
       } 

     } 

} 

ヘルプ?

+0

のActionScript 3.0を – MindGem

答えて

1

あなたはあなただけと仮定できるので、医薬品への直接のMovieClipを買う追加:

public function BuyDrug(e:MouseEvent):void 
{ 
    var drugClicked:Drug = e.target.parent as Drug; 
    // more stuff here 
} 

(あなたがリスナーはもちろん、「買い」に直接添加して持っている必要があるだろう)

+0

高耐久性。前回と同じように[オブジェクトDrug]を取得すると、インスタンス内で値段を取得しようとしていますが、値段を返すためにそのスニペットをどのように操作できるかはわかりません。私は何が欠けていますか? – MindGem

+1

'drugClicked.getPrice()'を使用してください。 – weltraumpirat

+0

更新。私はクラスにリスナーを置くことなく、その中のボタンに、それを働かせました。私はdrugClickedのゲッターをたどった。とてもありがとう! – MindGem

0
drug = new Drug(); 
drug.name = "drug"+i; 

これで、どのアイテムがクリックされたかがわかります。

関連する問題