2011-08-22 40 views
0

我有swf文件(900x600),該文件的主要部分是透明的。 所以,我想通過單擊SWF文件知道圖像的transaprent一部分,或者也不用戶點擊...檢查透明度

我可以通過鼠標

event.localX 
event.localY 

座標那麼如何在點擊部分SWF知道是透明的或不?

+1

當你說「透明」,你可能沒有矢量圖或其他東西與alpha = 0(一個PNG或形狀)? – Kodiak

+0

請澄清你的意思是「圖像」矢量或位圖? – Daniel

回答

2

首先可以肯定的,那你有一些透明的精靈在你的SWF文件的背景 - 否則您將不會收到事件。

其次,不要使用純本地座標,它們可以包含其他內部對象的本地座標,而你根本需要他們。例如,我使用階段的座標

如果您收到的鼠標事件,添加鼠標事件監聽到SWF的根和寫入以下內容:

 var bmd:BitmapData = new BitmapData(1, 1, true, 0); 
     var pt:Point = new Point(); 
     var m:Matrix = new Matrix(); 

     m.translate(-e.stageX, -e.stageY); 
     bmd.draw(this, m); 
     var transparent:Boolean = !bmd.hitTest(pt, 0x00, pt); 

     trace('color: '+bmd.getPixel32(0,0).toString(16)); 
     trace('is tranparent? ' + transparent); 

     bmd.dispose(); 
+0

由於它是真正幫助))) –

+0

不客氣。 –

0

您可以在舞臺上添加一個鼠標點擊事件監聽器,並檢查e.target ==舞臺。 下面是代碼:

所有的
import flash.events.MouseEvent; 
stage.addEventListener(MouseEvent.CLICK, hClick); 
function hClick(e : MouseEvent) : void 
{ 
    trace(e.target == stage); // true if we click on the transparent zone, false if we hit a symbol on the stage. 
} 
+0

它不能正常工作,因爲我有SWF在這部分,我的事件監聽器是不是在SWF(它是在整個舞臺!) –

0

不是最好的或乾淨的代碼,但它應該工作。 這是沒有測試的代碼,我只是鞭打它。

private function handleMouseDown(event:MouseEvent):void { 
    var pt:Point = new Point(event.localX, event.localY); 
     pt = event.target.globalToLocal(pt); 
    var tmp:int = int((new uint(event.target.getPixel32(pt.x,pt.y)).toString(16)).substr(0,2)); 

    if(tmp != 0){ 
    trace('is transparent') 
    } 
}