可选择使用Flash 10.2游标,同时仍与Flash 10.0兼容?

时间:2011-01-06 00:04:16

标签: flex flash actionscript-3 backwards-compatibility mouse-cursor

我有一个需要Flash版本10.0才能运行的Flash应用程序。我想添加Flash 10.2中引入的本机鼠标光标,但我不想要求所有用户升级,我不想编译我的应用程序的两个单独版本。

有没有办法在运行时我可以检测游标是否可用,然后使用它们?

看起来如果您只为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.

3 个答案:

答案 0 :(得分: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都可以正常工作。

答案 1 :(得分:2)

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

注意:

  • 这相当于调用属性Mouse.supportsNativeCursor,但由于在10.2之前不支持supportsNativeCursor,因此需要检查属性
  • 有些设备可能不支持游标,即使它们有10.2(Android平板电脑没有游标) - 所以也要注意这一点!
  • 您可能希望将此设置为布尔值,因为评估它可能会影响性能

感谢此视频提供此信息。跳到时间线7:40左右:

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

本文附带的视频:http://everythingfla.com/quickies/native-mouse

基本上解决方案如下:

答案 2 :(得分:1)

我对此没有明确的答案,但这里有一些想法。

您是否尝试在一个SWF中构建10.0的基本应用程序,将10.2代码放在另一个为10.2编译的SWF中,然后执行版本检测并加载10.2 SWF如果Flash播放器能够支持其中的功能子瑞士法郎?

但是,我不确定这是否会奏效。在FP6,FP7,FP8天,根SWF控制了哪些功能真正可用,无论您运行的是什么Flash播放器。例如,如果根用于FP6,FP7的子包,并在Flash Player 8中运行,你仍然(大部分)仅限于FP6功能。一些FP7功能可行,但不是全部。我必须这么做几年,所以我不知道它如何与AS3引擎一起工作。