Проверьте прозрачность - PullRequest
0 голосов
/ 22 августа 2011

У меня есть файл swf (900x600), и основная часть этого файла - прозрачная.Поэтому я хочу, щелкнув в SWF-файле, узнать, нажимает ли пользователь на прозрачную часть изображения или нет ...

Я могу получить координаты мыши по

event.localX
event.localY

Так как узнать в нажатой частиSWF прозрачен или нет?

Ответы [ 3 ]

2 голосов
/ 23 августа 2011

Прежде всего, убедитесь, что у вас есть прозрачный спрайт на фоне вашего 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 голосов
/ 23 августа 2011

Не самый лучший или самый чистый код, но он должен работать. Это не проверенный код, я его просто взбил.

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' )
  }
}
0 голосов
/ 22 августа 2011

Вы можете добавить прослушиватель событий на сцене для щелчка мышью и проверить, 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.
}
...