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

基本上解决方案如下: