加载PNG后其透明区域不响应事件
一路求学网 http://www.16qiuxue.com 阅览次数: 943次 08-24 17:03:27
标签:flash教程制作,flash动画教程,flash教程下载,http://www.16qiuxue.com
加载PNG后其透明区域不响应事件,
网上的一般的方法为~
先获取其bitmapData对象..
当进行点击操作时使用..
bitmapData.getPixel32(x,y)获取..
点击位置的是否透明..
然后再操作...
而mosueOver与mouseOut等事件稍为复杂点..
需要侦听mouseMove..
然后对经过的坐标进行透明判断~~再抛出相应的事件...
今天介绍的方法原理跟上面差不多..
不过我们使用Sprite的另一个属性hitArea..(关于hitArea的说明请查看这里)
在图像加载完毕后..
先绘制一个去除了透明部份的Sprite..
然后把该Sprite指定为源对象的hitArea..
先看看效果:
代码也很简单:main.mxml 01.<?xml version="1.0" encoding="utf-8"?> 02.<mx:Application xmlns:mx="http://www.adobe.com/2009/mxml" layout="absolute" xmlns:local="*"> 03. <mx:Script> 04. <![CDATA[ 05. import mx.managers.CursorManager; 06. private function abc(e:MouseEvent):void 07. { 08. if(e.type == "mouseOver") 09. { 10. CursorManager.setBusyCursor(); 11. }else 12. { 13. CursorManager.removeBusyCursor(); 14. } 15. } 16. ]]> 17. </mx:Script> 18. <local:MyImage source="/UploadTeach/200908/20090811213244572.jpg" mouseOver="abc(event)" mouseOut="abc(event)" y="25"/> 19. <mx:Image source="/UploadTeach/200908/20090811213244572.jpg" mouseOver="abc(event)" mouseOut="abc(event)" x="344" y="25"/> 20.</mx:Application>
MyImage.as,自定义Image类.. 01.package 02.{ 03. import flash.display.BitmapData; 04. import flash.display.DisplayObject; 05. import flash.display.Sprite; 06. import flash.events.Event; 07. import flash.geom.Matrix; 08. import flash.utils.setTimeout; 09. 10. import mx.controls.Image; 11. /** 12. * 自定义Image类,使之忽略PNG透明区域 13. * @author L4cd.Net 14. */ 15. public class MyImage extends Image 16. { 17. private var ht:Sprite = new Sprite(); 18. public function MyImage() 19. { 20. addChild(ht); 21. hitArea = ht; 22. //指定hitArea为ht对象 23. ht.visible = false; 24. ht.mouseEnabled = false; 25. mouseChildren = false; 26. addEventListener(Event.COMPLETE,complete,false,99,true); 27. setTimeout(update,50) 28. } 29. private function complete(e:Event):void 30. { 31. setTimeout(update,50) 32. } 33. private function update():void 34. { 35. if(!content)return; 36. var loader:DisplayObject = content.parent as DisplayObject; 37. var bit:BitmapData = new BitmapData(loader.width,loader.height,true,0x00000000); 38. var mat:Matrix = new Matrix(); 39. mat.scale(loader.scaleX,loader.scaleY); 40. bit.draw(loader,mat); 41. //重绘图象到bit 42. ht.graphics.clear(); 43. ht.graphics.beginFill(0); 44. for(var x:uint=0;x<bit.width;x++) 45. { 46. for(var y:uint=0;y<bit.height;y++) 47. { 48. if(bit.getPixel32(x,y))ht.graphics.drawRect(x,y,1,1); 49. } 50. } 51. //以graphics画出bit的无透明区域 52. ht.graphics.endFill(); 53. } 54. } 55.},加载PNG后其透明区域不响应事件
Webjx核心提示:有时候我们希望加载PNG后其透明区域不响应事件.
有时候我们希望加载PNG后其透明区域不响应事件..网上的一般的方法为~
先获取其bitmapData对象..
当进行点击操作时使用..
bitmapData.getPixel32(x,y)获取..
点击位置的是否透明..
然后再操作...
而mosueOver与mouseOut等事件稍为复杂点..
需要侦听mouseMove..
然后对经过的坐标进行透明判断~~再抛出相应的事件...
今天介绍的方法原理跟上面差不多..
不过我们使用Sprite的另一个属性hitArea..(关于hitArea的说明请查看这里)
在图像加载完毕后..
先绘制一个去除了透明部份的Sprite..
然后把该Sprite指定为源对象的hitArea..
先看看效果:
代码也很简单:main.mxml 01.<?xml version="1.0" encoding="utf-8"?> 02.<mx:Application xmlns:mx="http://www.adobe.com/2009/mxml" layout="absolute" xmlns:local="*"> 03. <mx:Script> 04. <![CDATA[ 05. import mx.managers.CursorManager; 06. private function abc(e:MouseEvent):void 07. { 08. if(e.type == "mouseOver") 09. { 10. CursorManager.setBusyCursor(); 11. }else 12. { 13. CursorManager.removeBusyCursor(); 14. } 15. } 16. ]]> 17. </mx:Script> 18. <local:MyImage source="/UploadTeach/200908/20090811213244572.jpg" mouseOver="abc(event)" mouseOut="abc(event)" y="25"/> 19. <mx:Image source="/UploadTeach/200908/20090811213244572.jpg" mouseOver="abc(event)" mouseOut="abc(event)" x="344" y="25"/> 20.</mx:Application>
MyImage.as,自定义Image类.. 01.package 02.{ 03. import flash.display.BitmapData; 04. import flash.display.DisplayObject; 05. import flash.display.Sprite; 06. import flash.events.Event; 07. import flash.geom.Matrix; 08. import flash.utils.setTimeout; 09. 10. import mx.controls.Image; 11. /** 12. * 自定义Image类,使之忽略PNG透明区域 13. * @author L4cd.Net 14. */ 15. public class MyImage extends Image 16. { 17. private var ht:Sprite = new Sprite(); 18. public function MyImage() 19. { 20. addChild(ht); 21. hitArea = ht; 22. //指定hitArea为ht对象 23. ht.visible = false; 24. ht.mouseEnabled = false; 25. mouseChildren = false; 26. addEventListener(Event.COMPLETE,complete,false,99,true); 27. setTimeout(update,50) 28. } 29. private function complete(e:Event):void 30. { 31. setTimeout(update,50) 32. } 33. private function update():void 34. { 35. if(!content)return; 36. var loader:DisplayObject = content.parent as DisplayObject; 37. var bit:BitmapData = new BitmapData(loader.width,loader.height,true,0x00000000); 38. var mat:Matrix = new Matrix(); 39. mat.scale(loader.scaleX,loader.scaleY); 40. bit.draw(loader,mat); 41. //重绘图象到bit 42. ht.graphics.clear(); 43. ht.graphics.beginFill(0); 44. for(var x:uint=0;x<bit.width;x++) 45. { 46. for(var y:uint=0;y<bit.height;y++) 47. { 48. if(bit.getPixel32(x,y))ht.graphics.drawRect(x,y,1,1); 49. } 50. } 51. //以graphics画出bit的无透明区域 52. ht.graphics.endFill(); 53. } 54. } 55.},加载PNG后其透明区域不响应事件
《加载PNG后其透明区域不响应事件》相关文章
- 加载PNG后其透明区域不响应事件
- › 加载PNG后其透明区域不响应事件
- 在百度中搜索相关文章:加载PNG后其透明区域不响应事件
- 在谷歌中搜索相关文章:加载PNG后其透明区域不响应事件
- 在soso中搜索相关文章:加载PNG后其透明区域不响应事件
- 在搜狗中搜索相关文章:加载PNG后其透明区域不响应事件
- tag: Flash教程,flash教程制作,flash动画教程,flash教程下载,平面设计教程 - Flash教程