当加载外部图片的时候,希望鼠标只响应不透明区域的事件,可以试试下面的方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | package { import flash.display.BitmapData; import flash.display.DisplayObject; import flash.display.LoaderInfo; import flash.net.URLRequest; import flash.events.Event; import flash.display.Loader; import flash.display.Sprite; /** * @author Hank * @blog http://www.po-min.com * 2010-2-2 */ [SWF(width="1000", height="600", backgroundColor="#FFFFFF", frameRate="40")] public class PNGMouse extends Sprite { private var PNGLINK : String = "0.png"; public function PNGMouse() { loadPNG(); } private function loadPNG() : void { var loader : Loader = new Loader; loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onPNGLoaderInit); loader.load(new URLRequest(PNGLINK)); } private function onPNGLoaderInit(e : Event) : void { var image : DisplayObject = LoaderInfo(e.currentTarget).content as DisplayObject; setButton(image); } private function setButton(image : DisplayObject) : void { var container : Sprite = new Sprite(); container.buttonMode = true; addChild(container); container.addChild(image); var bmd : BitmapData = new BitmapData(image.width, image.height, true, 0x00000000); bmd.draw(image); //设置遮罩,遮罩后会忽略遮罩以外的鼠标事件 var maskSp : Sprite = new Sprite(); maskSp.graphics.beginFill(0x0000FF, .2); container.addChild(maskSp); //设置点击区域,方便测试 var hitSp : Sprite = new Sprite(); hitSp.graphics.beginFill(0x0000FF, .2); container.addChild(hitSp); //取有效像素位置 /*----------------------------------------------------- * 缺点: * 一、如果图片大的话效率会比较低。 * 优化方式: * 1、调整历遍的密度,从1px改成2px或4px,用精确度换取效率 * 2、如果很多图片同时进行的话,可以使用队列方式进行 * * 二、半透明处边界判断问题(目前的判断方式只是排除完全透明处的橡树) * *----------------------------------------------------*/ for(var i : uint = 0;i < bmd.width; i++) { for(var j : uint = 0;j < bmd.height; j++) { if(bmd.getPixel32(i, j)) { maskSp.graphics.drawRect(i, j, 1, 1); hitSp.graphics.drawRect(i, j, 1, 1); } } } image.mask = maskSp; } } } |
希望对大家有用。
建议博客的文章统统都显示在首页,点击进入很痛苦。
再接再厉,博客的内容太少了,争取和你订阅的RSS一样多。
嘿嘿,谢谢你的建议,刚刚开始做这些,改PHP代码还有些吃力,慢慢充实内容的同时,再慢慢修正吧。订阅得多了,信息过载会很痛苦的。