我有一个需要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.
答案 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
,因此需要检查属性感谢此视频提供此信息。跳到时间线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引擎一起工作。