试图找出我点击过的6个实例中的哪一个?

时间:2011-11-15 10:09:18

标签: actionscript-3 actionscript instanceof

在Drug.as我有一个按钮,听众在Main,我正试图找出 我点击了哪个实例,所以我可以挑出药物的价格并进行购买。

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

        }

}

帮助?

2 个答案:

答案 0 :(得分:1)

您将购买MovieClip直接添加到Drug,因此您可以假设:

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

(当然,你必须将听众直接添加到“购买”)

答案 1 :(得分:0)

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

现在你可以识别哪个项目被点击了。