немного странный вопрос о порядке слоев - PullRequest
0 голосов
/ 24 апреля 2011

Мне было интересно, есть ли способ, чтобы объект A (например, Rect) визуально появлялся позади объекта B (например, другого Rect), но перед ним с точки зрения опрокидывания мыши. Другими словами, если вы наведете кончик мыши на точку пересечения A и B, A перевернется вместо B.

Если этого не существует "из коробки", мне любопытно, как бы вы реализовали что-то подобное.

спасибо

Ответы [ 2 ]

2 голосов
/ 24 апреля 2011

Может быть, этот образец соответствует вашим потребностям?

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:mx="library://ns.adobe.com/flex/mx"
    xmlns:s="library://ns.adobe.com/flex/spark">
    <fx:Script>
    <![CDATA[
        private function putBlueRectInFront():void
        {
            blueRect.depth = 1;
            redRect.depth = 0;
        }

        private function putRedRectInFront():void
        {
            redRect.depth = 1;
            blueRect.depth = 0;
        }

        protected function rectContainer_rollOutHandler(event:MouseEvent):void
        {
            rectContainer.removeEventListener(MouseEvent.MOUSE_MOVE, rectContainer_mouseMoveHandler);
            putBlueRectInFront();
        }

        protected function rectContainer_rollOverHandler(event:MouseEvent):void
        {
            rectContainer.addEventListener(MouseEvent.MOUSE_MOVE, rectContainer_mouseMoveHandler);
        }

        private function rectContainer_mouseMoveHandler(event:MouseEvent):void
        {
            if (event.localX <= redRect.width && event.localY <= redRect.height)
                putRedRectInFront();
            else
                putBlueRectInFront();
        }
    ]]>
    </fx:Script>
    <s:BorderContainer height="400" horizontalCenter="0" id="rectContainer"
        rollOut="rectContainer_rollOutHandler(event)" rollOver="rectContainer_rollOverHandler(event)" verticalCenter="0"
        width="400">
        <s:borderStroke>
            <s:SolidColorStroke color="black" weight="1" />
        </s:borderStroke>
        <s:Rect height="250" id="redRect" left="0" top="0" width="250">
            <s:fill>
                <s:SolidColor color="red" />
            </s:fill>
        </s:Rect>
        <s:Rect bottom="0" height="250" id="blueRect" right="0" width="250">
            <s:fill>
                <s:SolidColor color="blue" />
            </s:fill>
        </s:Rect>
    </s:BorderContainer>
</s:Application>
1 голос
/ 24 апреля 2011

Я не думаю, что это работает по своей сути.

Чтобы ObjectA появился позади ObjectB, вам просто нужно добавить ObjectA в контейнер перед ObjectB.Flex обрабатывает «Z-Order» на основе того, что элементы заказа были добавлены в контейнер.

Я бы реализовал изменение Z-порядка, используя swapChildren и события мыши.Возможно mouseOver для перемещения ObjectA сверху, а затем mouseOut для перемещения ObjectA назад.

Если у вас более сложная структура с более чем двумя классами, вы можете использовать swapChildrenAt .

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