我有swf文件(900x600),该文件的主要部分是透明的。 所以,我想通过单击SWF文件知道图像的transaprent一部分,或者也不用户点击...检查透明度
我可以通过鼠标
event.localX
event.localY
坐标那么如何在点击部分SWF知道是透明的或不?
我有swf文件(900x600),该文件的主要部分是透明的。 所以,我想通过单击SWF文件知道图像的transaprent一部分,或者也不用户点击...检查透明度
我可以通过鼠标
event.localX
event.localY
坐标那么如何在点击部分SWF知道是透明的或不?
首先可以肯定的,那你有一些透明的精灵在你的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();
由于它是真正帮助))) –
不客气。 –
您可以在舞台上添加一个鼠标点击事件监听器,并检查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.
}
它不能正常工作,因为我有SWF在这部分,我的事件监听器是不是在SWF(它是在整个舞台!) –
不是最好的或干净的代码,但它应该工作。 这是没有测试的代码,我只是鞭打它。
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')
}
}
当你说“透明”,你可能没有矢量图或其他东西与alpha = 0(一个PNG或形状)? – Kodiak
请澄清你的意思是“图像”矢量或位图? – Daniel