2011-10-11 72 views
8

我有一個movieclip包含一個位圖,我不想增加命中區域。我知道我可以在它後面添加一個透明的形狀,但這是通過ios編譯的,我不想引起不必要的重繪。AS3:定義命中區域

有沒有辦法將矩形定義爲命中區域或其他解決方案?

回答

15

爲此目的有一個特殊的hitArea字段。

const MOUSE_ZONE_SIZE:Number = 10; 
    const hitArea:Sprite = new Sprite() 
    hitArea.graphics.beginFill(0xFFFFFF); 
    hitArea.graphics.drawRect(-MOUSE_ZONE_SIZE, -MOUSE_ZONE_SIZE, MOUSE_ZONE_SIZE* 2, MOUSE_ZONE_SIZE* 2); 
    hitArea.mouseEnabled = false; 
    hitArea.visible = false; 
    hitArea.x = bitmap.x 
    hitArea.y = bitmap.y 
    bitmap.hitArea = hitArea; 
    addChild(bitmap); 
    addChild(hitArea); 

不幸的是,即使你重寫則hitTest * InteractiveObject的功能,他們將不會被用於鼠標事件調度:(如果有人知道如何強制閃光使用覆蓋的方法 - 我想知道這一點。

+0

所以它不會使用MouseEvent偵聽器?也不會因爲我們實際填充矩形並將其視爲位圖而導致重繪。 –

+1

hitArea正確地使用鼠標事件。 問題出現了替代方法 - 重疊hitTest *方法。所以不用擔心,只需使用hitArea。 矩形(hitArea)是不可見的,所以它不應該繪製。但我不確定Air是如何計算內部命中的 - 如果運氣好的話,只需檢查rect即可。 –

3

你也可以在裏面創建一個帶有位圖的按鈕,然後定義hitArea,它基本上和Ilya在代碼中做的事情是一樣的,但是當你將新的按鈕實例添加到舞臺上時, MouseEvents to it。

漂亮的圖片:)

Create the button symbol

Create a new key frame in the hitArea

Draw the hit area

package{ 
import flash.display.MovieClip; 
import flash.events.MouseEvent; 

public class main extends MovieClip 
{ 
    public function main() 
    { 
     var btn:button = new button(); 
     btn.addEventListener(MouseEvent.CLICK, clicked); 
     this.addChild(btn); 
    } 

    private function clicked(e:MouseEvent):void{ 
     trace("Clicked"); 
    } 

} 
} 

問題是,這將增加的內存和電源量在iOS做到這真是一個馬一塊... :(