3

我有一個需要運行Flash版本10.0的Flash應用程序。我想添加在Flash 10.2中引入的原生鼠標遊標,但我不想要求我的所有用戶都升級,而且我也不想編譯我的應用程序的兩個單獨版本。可選使用Flash 10.2遊標,同時仍與Flash 10.0兼容?

有什麼辦法可以在運行時檢測遊標是否可用,然後使用它們?

看起來好像如果您只爲Flash 10.0編譯,它將SWF版本標頭標記爲「10」,並且您無權訪問新的API。如果您爲Flash 10.2進行編譯,它會將版本標頭標記爲「11」,並且您可以訪問新的API,但無法再在舊版Flash播放器中運行(在加載Flex框架時出現瘋狂錯誤:

VerifyError: Error #1053: Illegal override of play2 in org.osmf.net.dynamicstreaming.DynamicNetStream. 

ReferenceError: Error #1065: Variable _379fa43169660c76f131cadc0adfbfe8f347bd31d3ceec26a9cb2a56f0dda1f9_flash_display_Sprite is not defined. 
+0

據我所知,Flash播放器10.2仍在測試階段。 – 2011-01-06 04:36:38

+0

這對於單個SWF來說是不可能的。在加載和加載正確版本的swf之前,您需要進行一些版本檢測。 – 2011-01-06 10:16:48

+0

這樣的痛苦,我的SWF就像總共2MB,差別就像15行代碼。我不想重新編譯一個不同版本的整個東西。他們真的應該考慮讓Flash更向前兼容。 – davr 2011-01-06 18:47:39

回答

1

我不對此有明確的答案,但這裏有一些想法

你有沒有試過在一個SWF建設10.0您的基本應用程序,把代碼10.2在另一個SWF這一點。編譯爲10.2,然後做一個版本檢測並加載10.2 SWF如果Flash播放器能夠支持sub-swf中的功能?

我不是s但如果這可行的話。在FP6,FP7和FP8的日子裏,無論您使用的是哪種Flash播放器,根SWF都可以控制哪些功能真正可用,例如,如果根用於FP6,FP7用於subswf,並且在Flash Player 8中運行,你仍然會(主要)限於FP6功能。一些FP7功能可以工作,但不是全部。我必須這麼做已經有好幾年了,所以我不知道它如何與AS3引擎協同工作。

2

像這樣的東西應該工作:

var bitmapDatas:Vector.<BitmapData> = new <BitmapData>[new BitmapData(32,32,false, 0xFF0000)]; 

var MouseCursorDataClass:Class; 
try { 
    MouseCursorDataClass = getDefinitionByName("flash.ui.MouseCursorData") as Class; 
}catch(e) {} 
if(MouseCursorDataClass) { 
    var cursorData = new MouseCursorDataClass(); 
    cursorData.data = bitmapDatas; 
    Mouse["registerCursor"]("test", cursorData); 
    Mouse.cursor = "Xmas"; 
}else { 
    var customCursor=new Bitmap(bitmapDatas[0]); 
    addChild(customCursor); 
    stage.addEventListener(MouseEvent.MOUSE_MOVE, moveCursor); 
} 

function moveCursor(e) { 
    customCursor.x=mouseX; 
    customCursor.y=mouseY; 
} 

而事實上MouseCursorData對象被創建和有效的10.2,但出於某種原因試圖調用Mouse.registerCursor()時,瀏覽器崩潰。我發佈了10.0版本,所以如果你發佈10.2版本,整個事情在10和10.2上都可以正常工作。

+0

如何使用Flash Builder爲10.2發佈? (或者如果你知道如何通過Flex SDK/mxmlc來完成)。我需要使用Flex 4.1框架進行編譯。 – davr 2011-01-12 05:32:04

+0

我認爲你需要下載一個特殊的SDK(英雄?)...但是如果你需要用4.1編譯,我會嘗試用MPD的解決方案;) – Cay 2011-01-12 09:31:35

+0

如果你用較新的SDK(英雄)編譯,它需要你使用Flash 10.2,它不會在10.0中運行。 – davr 2011-01-12 18:54:47

2
if (Mouse["supportsNativeCursor"]) 
{ 
    // do stuff with MouseCursorData... 
} 

注:

  • 這等同於調用的屬性Mouse.supportsNativeCursor,但由於supportsNativeCursor也不會被之前10.2的支持,你需要檢查屬性這樣
  • 有些人可能沒有設備支持遊標即使他們有10.2(Android平板電腦沒有遊標) - 所以也要注意!
  • 您可能希望將它設置爲一個布爾值,因爲可能評估它給出了一個性能命中

由於該視頻的這一信息。跳轉至約7:40的時間表:

http://www.youtube.com/watch?v=rtc3DYSuahI&feature=player_embedded#at=464

這是視頻陪這篇文章:http://everythingfla.com/quickies/native-mouse

基本上解決方案如下: