0

昨夜、プログラムのビルドを成功させました。そして、今朝起きて、Adobe AIR 3.1 から AIR 3.2 にアップデートした後、このバグを見つけました!

3.1 での同じビルドは完全に機能します。ただし、3.2 がインストールされるとすぐに、stopDrag の後の次のコードはサイレントに失敗します。パックされてインストールされた AIR アプリケーションでのみ失敗することに注意してください。Adobe Flash Professional CS5.5 内でテストすると、完全に動作します。

何が起こっている?これが私が扱っているコードです。この場合も、Adobe AIR 3.1 ではエラーなく動作しますが、3.2 では失敗します。構造上、この時点でプログラム内の他の MouseEvent.MOUSE_UP イベントにアクセスできません。

コードの無関係な部分を省略しました。それでも、エラーが正確に発生する場所がわからないため、多くのことがあります。発生するはずのすべてが発生する代わりに、stopDrag がこのブロックで起動するコードの最後の行です。

tile5.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler5);

function mouseUpHandler5(evt:MouseEvent):void
{
    Mouse.cursor = "paw";
    var obj = evt.target;
    var target = obj.dropTarget;
    obj.stopDrag();
    if (target != null && target.parent == hsSlot1)
    {
        brdgcheck(5, 1);
    }
}

function brdgcheck(tile:int, slot:int)
{
    var ck_brdg_l:String = "osr.Langue.brdg_l" + String(slot);
    var ck_brdg_t:String = "osr.Langue.brdg_t" + String(tile);
    var ck_slotfilled:String = "Slot" + String(slot) + "Filled";
    var ck_tile:String = "tile" + String(tile);
    var ck_slot:String = "hsSlot" + String(slot);
    var ck_txtTile:String;

    switch(tile)
    {
        case 1:
            ck_brdg_t = osr.Langue.brdg_t1;
            ck_txtTile = tile1.txtTile1.text;
        break;
        case 2:
            ck_brdg_t = osr.Langue.brdg_t2;
            ck_txtTile = tile2.txtTile2.text;
        break;
        case 3:
            ck_brdg_t = osr.Langue.brdg_t3;
            ck_txtTile = tile3.txtTile3.text;
        break;
        case 4:
            ck_brdg_t = osr.Langue.brdg_t4;
            ck_txtTile = tile4.txtTile4.text;
        break;
        case 5:
            ck_brdg_t = osr.Langue.brdg_t5;
            ck_txtTile = tile5.txtTile5.text;
        break;
    }

    switch(slot)
    {
        case 1:
            ck_brdg_l = osr.Langue.brdg_l1;
        break;
        case 2:
            ck_brdg_l = osr.Langue.brdg_l2;
        break;
        case 3:
            ck_brdg_l = osr.Langue.brdg_l3;
        break;
        case 4:
            ck_brdg_l = osr.Langue.brdg_l4;
        break;
        case 5:
            ck_brdg_l = osr.Langue.brdg_l5;
        break;
    }

    if (ck_brdg_l == ck_brdg_t)
    {
        osr.Sonus.PlaySound("concretehit");
        this[ck_slotfilled].visible = true;
        switch(slot)
        {
            case 1:
                Slot1Filled.txtSlot1.text = ck_txtTile;
            break;
            case 2:
                Slot2Filled.txtSlot2.text = ck_txtTile;
            break;
            case 3:
                Slot3Filled.txtSlot3.text = ck_txtTile;
            break;
            case 4:
                Slot4Filled.txtSlot4.text = ck_txtTile;
            break;
            case 5:
                Slot5Filled.txtSlot5.text = ck_txtTile;
            break;
        }

        this[ck_tile].visible = false;
        this[ck_slot].visible = false;
        if (hsSlot1.visible == false && hsSlot2.visible == false && hsSlot3.visible == false && hsSlot4.visible == false && hsSlot5.visible == false)
        {
            osr.Gradua.Score(true);
            osr.Gradua.Evaluate("brdg");
            btnReset.visible = false;
            hsChar.visible = false;
            if (osr.Gradua.Fetch("brdg", "arr_act_stcnt") < 4)
            {
                bga.gotoAndPlay("FINKEY");
                win_key();
            }
            else
            {
                bga.gotoAndPlay("FINNON");
            }
        }
        else
        {
            osr.Gradua.Score(true);
        }
    }
    else
    {
        osr.Gradua.Score(false);

        osr.Sonus.PlaySound("glassbreak");
        switch(tile)
        {
            case 1:
                tile1.x = 92.85;
                tile1.y = 65.85;
            break;
            case 2:
                tile2.x = 208.80;
                tile2.y = 162.85;
            break;
            case 3:
                tile3.x = 324.80;
                tile3.y = 65.85;
            break;
            case 4:
                tile4.x = 437.80;
                tile4.y = 162.85;
            break;
            case 5:
                tile5.x = 549.80;
                tile5.y = 65.85;
            break;
        }
    }
}

編集:「if (hsSlot1.hitTestPoint(mouseX,mouseY) && hsSlot1.visible == true)」を使用するための適切な回避策を見つけましたが、この問題の解決策は引き続き高く評価されます!

4

0 に答える 0