2

これが状況です。私のアプリには、透明な PNG で構成されるオーバーレイ レイヤーがあります。次のコードを使用して、png のヒットエリアを 1x1 の画像に置き換えました。

[Bindable]
[Embed(source = "/assets/1x1image.png")]
private var onexonebitmapClass:Class;

private function loadCompleteHandler(event:Event):void
{
    // Create the bitmap
    var onexonebitmap:BitmapData = new onexonebitmapClass().bitmapData;
    var bitmap:Bitmap;
    bitmap = event.target.content as Bitmap;
    bitmap.smoothing = true;
    var _hitarea:Sprite = createHitArea(onexonebitmap, 1);
    var rect:flash.geom.Rectangle = _box.toFlexRectangle(sprite.width, sprite.height);
    var drawnBox:Sprite = new FlexSprite();

    bitmap.width = rect.width;
    bitmap.height = rect.height;
    bitmap.x = -loader.width / 2;
    bitmap.y = -loader.height / 2;
    bitmap.alpha = _alpha;
    _hitarea.alpha = 0;
    drawnBox.x = rect.x + rect.width / 2;
    drawnBox.y = rect.y + rect.height / 2;

    // Add the bitmap as a child to the drawnBox
    drawnBox.addChild(bitmap);

    // Rotate the object.
    drawnBox.rotation = _rotation;

    // Add the drawnBox to the sprite
    sprite.addChild(drawnBox);

    // Set the hitarea to drawnBox
    drawnBox.hitArea = _hitarea;

}


private function createHitArea(bitmapData:BitmapData, grainSize:uint = 1):Sprite
{
    var _hitarea:Sprite = new Sprite();
    _hitarea.graphics.beginFill(0x900000, 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();
    return _hitarea;
}

これは、ここで行われた作業に基づいています: Flex で透明な (アルファ) 領域を持つ PNG イメージのヒットエリアを作成する

上記のコードを使用すると、基本的にすべてのマウス イベント (クリック、ダブルクリック、移動など) のオーバーレイ レイヤーを無視できます。ただし、オーバーレイの下にあるアイテムの右クリック (コンテキスト メニュー) イベントをキャプチャできません。 .

たとえば、テキストアイテムのスペルをチェックするスペルチェックコンポーネントがあり、他のほとんどのスペルチェッカーと同様に、単語が正しくないか、辞書にない場合、単語に赤い下線が引かれ、右クリックすると候補のリストが表示されますコンテキストメニューで。これは、テキスト ボックスがオーバーレイの下にない場合はうまく機能しますが、テキスト ボックスがオーバーレイの下にある場合は何も返されません。

透明なpngの下にあるtextItemで右クリックイベントをキャプチャする方法について、誰かが私にいくつかの指針を与えることができれば、それは素晴らしいことです。

4

0 に答える 0