Установите свойство scaleX на Sprite, не изменяя дочерний элемент внутри - PullRequest
0 голосов
/ 25 марта 2010

Возможно ли это?

Мой сайт настроен с помощью кнопок «Вперед» и «Пре» на правой и левой сторонах соответственно, и при наведении курсора на любую из областей нажатия вокруг кнопок исчезает спрайт, в котором содержится текстовое поле, описывающее следующую страницу. Упомянутый Sprite вызывает метод StartDrag (), поэтому он следует за мышью в пределах границ, что хорошо и удобно в левой части страницы. Однако Adobe, похоже, забыла предложить способ динамического изменения точки регистрации Sprite, MC, чего бы то ни было, поэтому, когда вы переворачиваете правую сторону страницы, спрайт отображается слева вверху и в основном отображается со сцены.

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

Могу ли я использовать этот хак без изменения текста?

OR

Кто-нибудь знает другой способ отображения Спрайта из другого угла? Есть ли способ заставить спрайт исчезнуть и следовать за мышью на левой стороне указателя мыши?

Заранее большое спасибо.

Вот фрагмент, чтобы дать представление о том, что происходит:

naxtPage.labelBG.scaleX = -1;
nextPage.labelBG.startDrag( true, nextHitRect );
nextPage.labelBG.x = nextPage.labelBG.parent.mouseX;
nextPage.labelBG.y = nextPage.labelBG.parent.mouseY;

Приветствия

1 Ответ

0 голосов
/ 26 марта 2010

Вы можете сделать это совершенно по-другому, используя событие ENTER_FRAME. Если вы создаете событие только тогда, когда пользователь наводит курсор на кнопку, то внутри функции запускается событие, вы проверяете положение мыши относительно границ этапа и определяете, где должно появляться всплывающее окно относительно курсора. Поскольку эта функция будет вызываться каждый кадр, ваше всплывающее окно будет следовать за мышью, всегда в нужном месте. Что-то вроде:

function onMouseOver(event:MouseEvent):void
{
    addEventListener(Event.ENTER_FRAME, updatePopup);
}

function updatePopup(event:Event):void
{
    if (mouseX > (stage.width - popup.width))
    {
        //Display the pop up on the left of the cursor
        popup.x = mouseX - popup.width;
    }
    else
    {
        //Display the pop up on the right of the cursor as normal
        popup.x = mouseX;
    }
}

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

Надеюсь, это поможет.

Debu

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