Подходы заменить курсор в чистом проекте 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/