AS3 Custom contextMenu для детей - PullRequest
0 голосов
/ 12 марта 2012

Я создал пользовательское contextMenu с помощью AS3 и могу применить его к сцене.Любой фрагмент ролика, который я помещаю на сцену, не наследует contextMenu от сцены, т. Е. Они отображают contextMenu по умолчанию.

Как применить свое пользовательское contextMenu к каждому дочернему элементу в моем приложении?[править]

Это упрощенная версия того, что у меня есть в моем файле main.as:

var my_menu:ContextMenu = new ContextMenu();
my_menu.hideBuiltInItems();

var my_copyright = new ContextMenuItem("Copyright - 2012");
my_copyright.enabled = false;
my_copyright.separatorBefore = true;

my_menu.customItems.push(my_copyright);

stage.contextMenu = my_menu;

Если я щелкну правой кнопкой мыши по сцене, то получу авторские права.Если я добавлю мувиклип (или что-то еще) на сцену, затем щелкните по нему правой кнопкой мыши, и я получу контекстное меню по умолчанию.

[edit]

Я обнаружил проблему,и исправил это.Я добавлял фоновое изображение, используя stage.addChildAt (mc, 0) ;.По какой-то причине это удаляет контекстное меню.Размещение дочернего элемента в 1 исправляет это и позволяет всему наследовать contextMenu.

До: http://richard.parnaby -king.co.uk / examples / stackoverflow / stackoverflow.swf

После: http://richard.parnaby -king.co.uk / examples / stackoverflow / stackoverflow-after.swf

Я меняю назначение вознаграждения - может кто-нибудь объяснить, ПОЧЕМУ это происходит!

Ответы [ 3 ]

1 голос
/ 21 марта 2012

Ответ на ваш вопрос «почему» действительно субъективен по отношению к тому, что еще вы добавляете на сцену и к их порядку.

Я мог бы процитировать 2 балла из Adobe Live Docs , относящихся к тому же:


Индекс 0 представляет заднюю (нижнюю часть) списка отображения для этот объект DisplayObjectContainer.


Если вы укажете занимаемую в данный момент позицию индекса, дочерний объект который существует в этой позиции, и все более высокие позиции перемещаются на одну позиция в списке детей.


Думаю, если вы правильно проанализируете все, что добавлено на сцену, вы сами можете получить ответ.

1 голос
/ 24 марта 2012

Хорошо, так что после небольшого тестирования это то, что у меня есть. Я не могу сказать, что это так однозначно, поскольку flash не выдает события для щелчка правой кнопкой мыши, так что это всего лишь предположение, но, похоже, оно оправдано.

В примечании вы не можете добавить контекстное меню на сцену, оно не разрешит его, поэтому самый низкий элемент, к которому вы можете добавить это, - это класс документа

Когда вы щелкаете правой кнопкой мыши на DisplayObject, он ищет ContextMenu для этого объекта. Если он не найдет его, он продолжит вверх по иерархии для того объекта, который ищет его, и остановится, когда найдет его. Примерно так:

stage
    - document (has context menu1)
        - parent (has context menu2)
            - child
        - parent2

В этом примере, если вы щелкнете правой кнопкой мыши на child, меню не будет, поэтому оно выглядит как parent. Здесь он находит context menu2, так что показывает это. Однако, если вы щелкнете правой кнопкой мыши на parent2, меню не будет, поэтому оно будет выглядеть как document, и здесь оно найдет context menu1.

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

Когда вы добавили фоновое изображение на глубину 0, вы увеличили класс документа до глубины 1. Теперь ваша иерархия выглядит примерно так:

stage
    - bg
    - document (has context menu1)
        - parent (has context menu2)
            - child
        - parent2

Я предполагаю, что вы добавляете свое контекстное меню в класс документа (в этом примере context menu1), поэтому, если в вашем классе документа нет некоторой графики, ваше событие будет искать до стадии, не находя контекста меню, затем попытайтесь найти контекстное меню дочернего элемента 0 - в данном случае bg, которого нет.

Вы можете проверить это, нарисовав что-то в объекте graphics вашего класса документов (или щелкнув по одному из вложенных элементов). Если вы щелкните правой кнопкой мыши на графике, вы увидите свое пользовательское меню, даже если bg находится на глубине 0. В качестве альтернативы, вы можете добавить другое меню к bg, чтобы увидеть, что я имею в виду.

0 голосов
/ 13 марта 2012

попробуйте изменить stage.contextMenu = my_menu; на contextMenu = my_menu;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...