我有一个包含位图的movieclip,我不想增加命中区域。我知道我可以在它后面添加一个透明的形状,但这是通过air编译为ios,我不想导致不必要的重绘。
有没有办法将矩形定义为命中区域或其他解决方案呢?
答案 0 :(得分: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 );
不幸的是,即使你覆盖了InteractiveObject的hitTest *函数,它们也不会用于鼠标事件调度:(如果有人知道如何强制Flash使用重写方法 - 我也想知道它。
答案 1 :(得分:3)
您还可以在其中创建一个带有Bitmap的按钮,然后定义hitArea。它基本上与Ilya在代码中所做的一样。但是,当您将新按钮实例添加到舞台时,您将能够将MouseEvents应用于它。
漂亮的照片:)
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上的内存和电量,所以它真的是一块马...... :(