2010-04-10 42 views
3

如何将位图设置为按钮,以便我可以将按钮模式和鼠标事件应用于其上,而无需将位图添加到影片剪辑?位图作为按钮?

var bmpFull=new Bitmap(event.currentTarget.content.bitmapData); 
     bmpFull.smoothing=true; 
     bmpFull.name="photo"; 
     bmpFull.alpha=0; 

     //fullMC.buttonMode=true; 
     fullMC.addChild(bmpFull); 

回答

7

不幸的是,位图对象不从InteractiveObject类扩展 - 也就是说,他们不”没有(也不能轻易获得)接收鼠标事件的能力。

正如antpaw和Jeremy White在前面的回答中指出的那样,最简单的接收鼠标事件的容器类是Sprite类。因此,如果你想有一个位图接收鼠标事件,而不是使用的电影剪辑,你可以使用一个雪碧:

var bmpFull:Bitmap = new Bitmap(event.currentTarget.content.bitmapData); 
bmpFull.smoothing = true; 
bmpFull.name = "photo"; 
bmpFull.alpha = 0; 

var bmpContainer:Sprite = new Sprite(); // can receive mouse events, for example: 
bmpContainer.addEventListener(MouseEvent.CLICK, clickHandler); 
bmpContainer.buttonMode = true; // this just makes it show the hand cursor, and is not necessary for the mouse events to work 
bmpContainer.addChild(bmpFull); 

事实上,我会建议使用雪碧,因为他们是简单的对象比影片剪辑,因此不需要太多的内存。

现在,如果您想在不使用任何类型的容器剪辑的情况下制作位图调度鼠标事件,则可能需要编写自己的具有自己的事件管理器的Bitmap类的扩展。这将远远更复杂。我强烈建议只使用Sprite作为容器。

+0

谢谢,我有一个问题:你将如何检索'clickHandler'函数内的'bmpFull.name'? 'trace(this.name)'不会获得“照片”任何想法?谢谢 – Metafaniel 2013-05-15 19:04:44

+1

尝试设置'bmpContainer.name =“photo”'。 – ivanreese 2013-05-17 19:56:47

3

buttonMode是雪碧的属性的影片剪辑的

继承是这样

MovieClip >> Sprite >> DisplayObjectContainer >> InteractiveObject >> DisplayObject >> EventDispatcher >> Object 

                  Bitmap >> DisplayObject >> EventDispatcher >> Object 
+1

这个答案需要更多的解释:你需要把位图放在一个Sprite对象中才能访问鼠标事件。 – 2010-04-11 23:22:12