При желании можно использовать курсоры Flash 10.2, но при этом быть совместимым с Flash 10.0? - PullRequest
3 голосов
/ 06 января 2011

У меня есть приложение Flash, для работы которого требуется Flash версии 10.0.Я хочу добавить собственные курсоры мыши, которые были представлены во Flash 10.2, но я не хочу требовать от всех своих пользователей обновления и не хочу компилировать две отдельные версии моего приложения.

Есть ли способ во время выполнения, чтобы я мог определить, доступны ли курсоры, и затем использовать их?

Похоже, если вы компилируете только для Flash 10.0, он помечает заголовок SWF-версии "10", и у вас нет доступа к новым API.И если вы компилируете для Flash 10.2, он помечает заголовок версии «11», и у вас есть доступ к новым API, но вы больше не можете работать в старом Flash Player (я получаю сумасшедшие ошибки при загрузке фреймворка 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 ]

2 голосов
/ 11 января 2011

Примерно так должно работать:

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.

2 голосов
/ 09 апреля 2011
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

В основном решение выглядит следующим образом:

1 голос
/ 06 января 2011

У меня нет однозначного ответа на этот вопрос, но вот некоторые мысли.

Вы пытались собрать базовое приложение для 10.0 в одном SWF-файле, поместить код 10.2 в другой SWF-файл, скомпилированный для 10.2, а затем выполнить обнаружение и загрузку версии 10.2 SWF-файла, если проигрыватель Flash поддерживает функции суб-швейцарские франки?

Я не уверен, что это сработает. В дни FP6, FP7, FP8 корневой SWF контролировал, какие функции действительно были доступны, независимо от того, в каком проигрывателе Flash вы работали. Например, если root был для FP6, подпрограмма для FP7 и работала в Flash Player 8 , вы все равно были бы (в основном) ограничены функциональностью FP6. Некоторые функции FP7 будут работать, но не все. Прошло несколько лет с тех пор, как мне пришлось это делать, поэтому я не знаю, как это работает с двигателем AS3.

...