[英]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.