一、hitArea
LayaAir下size的设置不是改变显示对象的宽高值,而是设定该显示对象的鼠标响应区域。
事件是否被命中有两个条件,一个是是否设置了size的宽高,一个是mouseEnable是否为true。
如果子对象被命中,会自动冒泡
var sprite:Sprite = new Sprite();
sprite.graphics.drawRect(100,100,100,100,"#ff9900");
var hitarea:HitArea = new HitArea();
var graphics:Graphics = new Graphics();
graphics.drawRect(100,100,100,100,"#ff9900");
hitarea.hit = graphics;
sprite.hitArea = hitarea;
1.把精灵添加到父精灵里,设子精灵mouseenabled为true,父精灵设置mouseenabeld为false,则子精灵也不能响应
2.Sprite本身宽高的作用只是用来点击碰撞用的,类似u3d的碰撞体。Sprite默认没有宽高,可以手动设置宽高,或者通过getbounds函数获取,还可以设置autoSize=true,然后再获取宽高。Sprite的宽高只是用来做碰撞使用,并不影响显示大小,如果更改显示大小,需要使用scaleX,scaleY。
Sprite默认不接受鼠标事件,即mouseEnabled=false,但是只要对其监听任意鼠标事件,会自动打开自己以及所有父对象的mouseEnabled=true。
3.鼠标事件会冒泡,也就是子对象被命中,父对象也会收到相应的事件,无论父对象宽高是多少(可以通过event.stopPropagation()阻止事件冒泡)。其他事件包括自定义事件都是不冒泡的。
二、alpha
某些建筑上黄色遮罩层,可以简单地通过alpha=0.01和1来切换UP,DOWN事件。这样就不用设置点击区域了
三、不规则热区
用Graphcis的实例绘制出了一个ape形状的多边形,并且这个实例的RenderType属性为hit,即可点击区域。参考不规则热区的实现