2011-08-22 64 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') 
    } 
}