2010-04-10 43 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