我以爲我已經解決了我的mouseEvent問題,包含一個帶有alpha通道的位圖的精靈,但是我遇到了下圖中顯示的新問題:邊界框在「歐亞」地圖雪碧被觸發`MouseEvent.Roll_Out」爲‘非洲’雪碧防止透明位圖精靈的邊界框觸發鼠標事件
我的設置:每個地圖部分是與孩子的位圖雪碧(PNG阿爾法)和一個從位圖派生的「hitArea」精靈,相關的代碼如下:這很好用 - 除了有邊框重疊的情況。我附加到每個Sprite的eventListeners
使用MouseEvent.ROLL_OVER
和MouseEvent.ROLL_OUT
,但我也嘗試過MouseEvent.MOUSE_OVER
和MouseEvent.MOUSE_OUT
。
我已經嘗試將eventlisteners附加到「hitArea」Sprite和其他各種東西,但我無法使邊界框被忽略。有沒有我可能錯過的設置 - 或解決方法?
代碼:
buttonImage = new Bitmap(upImageData);
buttonImage.smoothing = true;
this.addChild(buttonImage);
hitSprite = createHitArea(upImageData, 4);
this.addChild(hitSprite);
hitSprite.visible = false;
hitSprite.mouseEnabled = false;
this.hitArea = hitSprite;
public function createHitArea(bitmapData:BitmapData, grainSize:uint=1):Sprite
{
var _hitarea:Sprite = new Sprite();
_hitarea.graphics.beginFill(0x000000, 1.0);
for(var x:uint=0;x<bitmapData.width;x+=grainSize) {
for(var y:uint=grainSize;y<bitmapData.height;y+=grainSize) {
if(x<=bitmapData.width && y<=bitmapData.height && bitmapData.getPixel(x,y)!=0) {
_hitarea.graphics.drawRect(x,y,grainSize,grainSize);
}
}
}
_hitarea.graphics.endFill();
_hitarea.cacheAsBitmap = true;
return _hitarea;
}
大多數人通過任何解決這個問題:一個**:** - 掩蔽與矢量蒙版剪輯(儘管對於可能由於形狀的複雜性而引起性能問題的地圖)或** b:在鼠標單擊處理程序上的**確定鼠標點下的像素是否透明。你可以使用方法A,但只是繪製一個簡單的矢量蒙版,接近地圖形狀,因爲它沒有矢量的複雜性。 – BadFeelingAboutThis
謝謝 - 所以這是一個「已知問題」的東西?我以爲我是免費的,採用了位圖的方法,並且效果很好 - 除了這個邊界框問題。不能使用方法「a」:這些位圖是用戶在運行時從.psd文件導入的。我已經看到了「檢查像素」的方法演示 - 猜我會試一試。 –
是的,鼠標偵聽器只使用邊界(除了矢量蒙版) – BadFeelingAboutThis