Графика добавлена ​​поверх кнопки. Почему блокируется MouseEvent? - PullRequest
1 голос
/ 29 октября 2009

Привет всем, моя проблема сегодня состоит в том, что у меня есть пара кнопок, которые скользят вверх и вниз, когда в состоянии вверх я добавляю X-изображение, чтобы символизировать кнопку закрытия. Однако X-изображение, кажется, блокирует мое действие кнопки.

alt text
(источник: flickr.com )

У меня есть пример в фильме Я работал над >> здесь << </strong>. Здесь есть 2 фильма, самый большой, если вы нажмете на любую синюю вкладку, вы увидите, о чем я говорю, появится кнопка X, но нажатие на область X не приведет к падению кнопки. Вы должны нажать на синюю область кнопки, чтобы опустить кнопку обратно.

Теперь я сделал тестовый ролик меньшего размера, добавив кнопку X в основном таким же образом, и, если вы заметите, она работает нормально (анимирует вправо, даже если вы нажмете на графику X)

Вот мой код в Большом фильме (я спрятал код анимации, чтобы он не был таким длинным):

function handleButtonClick(event:MouseEvent):void {
var button:MovieClip=event.target as MovieClip;
var id:Number=Number(button.name.split("button")[1]);

dispatchEvent(new CustomEvent(CustomEvent.PAUSE_MOVIE, {}));

if (! $btn1&&! $btn2) {
    if (storeButton2==buttons[id]) {
        closeTabX.x = buttons[1].width - (closeTabX.width + 10);
        closeTabX.y=buttons[1].height/2-15;
        buttons[1].addChild(closeTabX); // X added here
        $btn2=true;
        $btn1=false;
    } else if (storeButton1 == buttons[id]) {
        closeTabX.x = buttons[0].width - (closeTabX.width + 10);
        closeTabX.y=buttons[0].height/2-15;
        buttons[0].addChild(closeTabX); // X added here
        $btn1=true;
        $btn2=false;
    }
} else if ($btn1 && !$btn2) {
    if (storeButton2==buttons[id]) {
        buttons[0].removeChild(closeTabX); // X removed here
        buttons[1].addChild(closeTabX); // X added here
        $btn2=true;
        $btn1=false;
    } else if (storeButton1 == buttons[id]) {
        buttons[0].removeChild(closeTabX); // X removed here
        $btn1=false;
    }
} else if ($btn2 && !$btn1) {
    if (storeButton2==buttons[id]) {
        buttons[1].removeChild(closeTabX);
        $btn2=false;
    } else if (storeButton1 == buttons[id]) {
        buttons[1].removeChild(closeTabX); // X removed here
        buttons[0].addChild(closeTabX); // X added here
        $btn1=true;
        $btn2=false;
    }
}

}

Теперь вот код в моем основном тестовом фильме:

var blueButton:MovieClip;
var closeBtnX:MovieClip;

blueButton = new BlueButton;
blueButton.buttonMode = true;

closeBtnX = new CloseTabX;
closeBtnX.x = blueButton.width/2 - closeBtnX.width;

addChild(blueButton);


blueButton.addEventListener(MouseEvent.MOUSE_UP, specialClick);

function specialClick(event:MouseEvent):void
{
  blueButton.addChild(closeBtnX); // X added here
  blueButton.x = blueButton.x+10;
}

Не понимаю, почему вы не можете щелкнуть X в главном примере, чтобы закрыть вкладку, но вы можете сделать это в моем небольшом простом фильме? Мысли, идеи?

1 Ответ

3 голосов
/ 29 октября 2009

вы не опубликовали, как вы создаете экземпляр 'closeTabX' в первом примере, это тот же класс, что и в меньшем примере (CloseTabX)?

Простое «исправление» заключается в том, что если вы установите его свойства следующим образом, он не будет блокировать события мыши для своего родителя:

closeTabX.mouseEnabled = false;
closeTabX.mouseChildren = false;

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

...