我有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