Flash 8 Key.onKeyUp Bug @ Ticore's Blog :: 隨意窩 Xuite日誌
  • Site Search
  • Google
    Web Ticore's Blog
  • 最新文章
  • Recent Comments
  • 2005-12-14 10:57 Flash 8 Key.onKeyUp Bug
    平均分數:0 顆星    投票人數:0
    我要評分:

    Flash 8 Key.onKeyUp Event Bug

    狀況

    發布為Flash 8 swf格式時,Key class的onKeyUp事件,遇到同時按下兩個按鍵,無法擷取到第二個放開按鍵的事件


    MMUG上的原始文章
    http://mmug.com.tw/forum/viewtopic.php?p=31432


    敘述 結果
    Test 01 分別將含有偵測Key.onKeyUp的swf發布為Flash 7、8格式,以Flash 8 Player執行 發布為Flash 7格式可以成功擷取連續兩次onKeyUp;而Flash 8格式不行 Key.onKeyUp Bug可能與swf格式有關
    Test 02 沿用Test 01的兩個key swf,另外撰寫swf loader發布為Flash 7、8格式,分別load Test 01的兩個swf到_level1,以Flash 8 Player執行loader swf進行測試 發布為Flash 7格式的loader無論load哪種格式swf key,都可以成功擷取連續兩次onKeyUp;而Flash 8格式loader則都不行 Key.onKeyUp Bug與程式碼所在的swf格式無絕對關係,而是與最初執行的loader swf格式有關
    Test 03 同Test 02,load swf改成load到_level0.anchor MovieClip 同上
    Test 04 同Test 02,load swf改成load到_level0 只是要是被load key swf為Flash 7格式的都成功,而被load key swf為Flash 8格式的都失敗 可能是由於load到_level0是完全取代方式所造成
    Test 05 將含有偵測Key.onKeyUp的swf發布為Flash 8格式,然後使用UltraEdit直接修改swf signature為ver. 7,以Flash 7、8 Player執行之 均可以成功擷取連續兩次onKeyUp 此Bug與AS Bytecode無關,而是出在Flash 8 Player本身對swf 8的處理方式

     

    Key.onKeyUp AS
    listener = {};
    listener.onKeyDown = function() {
    trace("onKeyDown");
    output.text += "onKeyDown" + new Date() + "n";
    output.vPosition = output.maxVPosition;
    };
    listener.onKeyUp = function() {
    trace("onKeyUp");
    output.text += "onKeyUp" + new Date() + "n";
    output.vPosition = output.maxVPosition;
    };
    Key.addListener(listener);



    改善方式

    1.替Flash 8格式的Game swf另外撰寫Flash 7格式的loader swf,當作起始swf,將Game load到_level1以上或者是MovieClip內

    2.直接修改swf signature為ver. 7,但是可能會有其它副作用


    已經有人寫了一個Class利用setInterval自行偵測onKeyUp事件
    Mixmedia Blog Key.onKeyUp bug in flash8

    Ticore / Xuite日誌 / 回應(1) / 引用(0) / 好文轉寄
    回應