簡體   English   中英

我似乎無法訪問放置在AS3舞台上的自動命名的對象(實例##),我丟失了什么嗎?

[英]I can't seem to access automatically named objects (instance##) placed on the stage in AS3, am I missing something?

我的庫中有一個動畫片段,它是在文檔類的動作腳本中動態添加到舞台的。 此動畫片段包含許多子圖片,這些子圖片是直接從photoshop原始位置導入的( 必須保留)。

我不想手動命名每個圖像實例,因為有數十個。

我已經經歷了並將圖像手動轉換為符號的過程,因為顯然Flash無法將“位圖”對象識別為AS3中的父動畫片段的子元素(numChildren看不到位圖,但是它看到了符號)。

我有一個數組,其中包含對數十個孩子的引用,然后遍歷它,檢查單擊時是否每個鼠標都在鼠標下方。 但是,以某種方式, 除非我手動命名子符號,否則它不會檢測到何時單擊這些項目(我通過手動命名其中幾個符號進行測試-這些符號變得對點擊敏感)。

我已經在整個代碼中進行了trace()調試,驗證我的數組中是否裝有數據,實際上該數據是實例的名稱(自動命名為IE instance45,instance46,instance47等),驗證函數是否在單擊時運行,如果我手動命名符號,則驗證代碼是否正常運行。

誰能看到發生了什么問題,或者我看不懂閃存的哪個方面?

這是代碼:

    //check each animal to see if it was clicked on
    private function check_animal_hits():void
    {


        var i:int = 0;
        var animal:Object = this.animal_container;

        for (i=0; i<animal.mussels.length; i++)
        {

            if (this.instance_under_cursor(animal.mussels[i].name))
            {

                var animal_data = new Object();
                animal_data.animal = "mussel";
                this.send_data(animal_data);

            }
        }


    }

這是instance_under_cursor()方法的代碼:

    // Used for finding out if a certain instance is underneath the cursor the instance name is a string 
    private function instance_under_cursor(instance_name)
    {
        var i:Number;
        var pt:Point = new Point(mouseX,mouseY);
        var objects:Array = stage.getObjectsUnderPoint(pt);
        var buttons:Array = new Array  ;
        var o:DisplayObject;
        var myMovieClip:MovieClip;


        // add items under mouseclick to an array
        for (i = 0; i < objects.length; i++)
        {
            o = objects[i];
            while (! o.parent is MovieClip)
            {
                o = o.parent;
            }
            myMovieClip = o.parent as MovieClip;

            buttons.push(myMovieClip.name);
        }


        if (buttons.indexOf(instance_name) >= 0)
        {
            return true;
        }



        return false;
    }

更新:

我相信我將其范圍縮小到了getObjectsUnderPoint()不能檢測對象的問題,除非它們是手動命名的。

這是在鼠標指針下查找對象的最奇怪的方法。有一個內置函數可以做到這一點。 但是,除此之外,您不應該依賴實例名稱,因為它們無關緊要/可以僅出於歷史原因對其進行更改/保留。 使用此屬性的代碼需要進行重構。

但是,您可能觀察到的是:在Flash CS中將圖像放到場景中時,Flash會嘗試通過將它們全部縮小為帶位圖填充的形狀來對其進行優化。 一旦將它們轉換為符號,它將無法執行操作(因為它假定您以后要使用它們),但是它將創建Bitmpas-Bitmap不是交互式對象-即它不注冊鼠標事件-將其添加到getObjectsUnderPoint()返回的內容中毫無意義。 顯然,您想要做的是使它們具有交互性,例如Sprite。 因此,您將父級作為MovieClip進行的測試沒有抓住重點-因為父級不必為MovieClip(可以是Sprite或SimpleButton或Loader)。

但是,如果您可以解釋您需要instance_under_cursor函數用於做什么,那么可能會有更好的方法來執行其應做的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM