2011-08-22 5 views
0

swf 파일 (900x600)이 있고 그 파일의 주요 부분이 투명합니다. 그래서 나는 투명 내가 마우스를 어떻게 클릭 부품 SWF에 알고투명도 확인

event.localX 
event.localY 

에 의해 좌표를 얻을 수 있습니다

... transaprent 이미지의 일부 여부에 중 사용자가 클릭 알고 SWF 파일을 클릭하여 원하는 안 그래?

+1

"투명"하다고 말하면 벡터 드로잉이 없거나 알파 = 0 (png 또는 모양) 인 것이 있습니까? – Kodiak

+0

"이미지"벡터 또는 비트 맵의 ​​의미를 명확히 설명하십시오. – Daniel

답변

2

첫째, 당신이 당신의 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 == stage인지 확인합니다. 이 여기에 코드입니다 : - 그렇지 않으면 이벤트를 수신하지 않습니다 모든

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

하지 최고의 또는 깨끗한 코드 만 작동합니다 : 예를 들어, 당신이 마우스 이벤트를받을 경우, 해당 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') 
    } 
}