Подходы заменить курсор в чистом проекте AS3 / Flare?

У меня есть чистый проект AS3 (без Flex), который использует Flare для отображения и взаимодействия с визуализацией данных. Я только что реализовал некоторое поведение панорамирования, так что вы можете щелкнуть и перетащить визуализацию вокруг, и теперь я хотел бы дать пользователю визуальный индикатор того, что это возможно, переключая курсор со стрелкой с красивым изображением руки, похожим на ручку.

Пользователь может щелкнуть и перетащить в любое время, кроме случаев, когда мышь находится над активируемым узлом узлом (когда курсор переключается на указатель - это поведение уже на месте).

Так...
1) Нужно ли мне создавать свой собственный растровое изображение / спрайт или есть палитра встроенных курсоров, которые я могу использовать? (Я не использую Flex.)

2) Есть ли способ просто заменить стрелку по умолчанию на панорамирующий курсор по всему проекту, или мне нужно прикрепить обмен к событиям мыши на экранных объектах? Могу ли я использовать объект сцены для повсеместного применения этого поведения?

3) Как мне выполнить своп? Я использую объект Cursor напрямую или мне нужно участвовать в CursorManager?

Любое руководство, псевдокод или слова мудрости приветствуются!

2 ответа

Решение

Несколько вещей, которые я изучил (все довольно новенькое, правда). Во-первых, есть несколько встроенных параметров курсора, которые вы можете установить, установив Mouse.cursor на любой из параметров MouseCursor.TYPE. Объект Mouse - одноэлементный доступный для всего приложения, поэтому, где бы вы ни изменяли его в своем коде, изменение сохраняется до тех пор, пока не будет инициировано другое изменение. Для моего простого случая я сделал это:

    //on init, start with the "hand"
    Mouse.cursor = MouseCursor.HAND;

    //on clickable items, change to "pointer", then back to "hand"
    myClickableNode.addEventListener(MouseEvent.ROLL_OVER, function(evt:Event):void {
      Mouse.cursor = MouseCursor.BUTTON;
    });
    myClickableNode.addEventListener(MouseEvent.ROLL_OUT, function(evt:Event):void {
    Mouse.cursor = MouseCursor.HAND;
    });

В результате у вас всегда есть "рука", пока вы не перевернете что-нибудь, что можно нажать, а затем вы получите "указатель".

Я не думаю, что во Flash есть CursorManger, только гибкий. Я делаю это с помощью пользовательского класса, который скрывает курсор и перетаскивает настроенный курсор в mouse_move. Вы должны установить его в mouseChildren = false, иначе будет мерцать или кнопки не будут активными. Одна проблема, которую я обнаружил, связана с пользовательскими контекстными меню. Попробуйте эту ссылку http://abrahamyan.com/2009/03/23/as3-cursormanager/

Другие вопросы по тегам