Гиперссылки кнопок в Animate ActionScript 3.0

Я пытаюсь сделать три кнопки в Adobe Animate, используя ActionScript. Вот код, который я использую для кнопки 1:

button. addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
function mouseDownHandler(event:MouseEvent):void {
     navigateToURL(new
     URLRequest("https://website.com/"));
}



button2. addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
function mouseDownHandler2(event:MouseEvent):void {
     navigateToURL(new
     URLRequest("https://anotherwebsite.com/"));
}


button3. addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
function mouseDownHandler3(event:MouseEvent):void {
     navigateToURL(new
     URLRequest("https://yetanotherwebsite.com/"));
}

(URL-адреса придуманы и предназначены только для демонстрационных целей.) Код для кнопок 2 и 3, как видите, абсолютно одинаковый, но на разных слоях. Я также меняю имя экземпляра в начале, имя функции и URL-адрес для каждой кнопки. Но когда я нажимаю CTRL + Enter, все кнопки ведут на одну и ту же веб-страницу (в данном случае «website.com»), которую я вставил первой. Это должно привести к разным URL-адресам, которые я ввел, но все они ведут к одному и тому же. Почему это происходит и как это исправить?


person mbjb    schedule 28.05.2018    source источник
comment
С приведенным выше кодом проблем нет. Пожалуйста, отредактируйте вопрос, чтобы предоставить фактический код, соответствующий принципам MCVE: stackoverflow.com/help/mcve На данный момент поддающийся проверке аспект находится под вопросом.   -  person Organis    schedule 28.05.2018
comment
Покажите код для всех трех кнопок и убедитесь, что имена экземпляров в Animate соответствуют вашему коду в каждом соответствующем кадре.   -  person BadFeelingAboutThis    schedule 28.05.2018
comment
Я отредактировал вопрос, чтобы сделать его более понятным. @BadFeelingAboutThis, я проверил и перепроверил имена, прежде чем задать этот вопрос, иначе я бы не стал, если бы это было проблемой. Спасибо за совет в любом случае.   -  person mbjb    schedule 29.05.2018
comment
Ваша формулировка проблемы очень ясна, спасибо, но вы не предоставили достаточно информации, чтобы определить проблему. Я бы рекомендовал вставить ВЕСЬ код для всех 3 слоев/кнопок.   -  person BadFeelingAboutThis    schedule 29.05.2018
comment
@BadFeelingAboutВот и весь код.   -  person mbjb    schedule 04.06.2018
comment
Спасибо, теперь проблема ясна, все три ваши кнопки имеют тот же mouseDownHandler, что и их обработчик событий   -  person BadFeelingAboutThis    schedule 04.06.2018


Ответы (1)


Проблема в том, что хотя вы определили 3 отдельные функции-обработчика для 3-х отдельных кнопок, вы прикрепляете первую функцию-обработчик ко всем 3-м кнопкам:

button. addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
button2. addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
button3. addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);

Что вы хотите сделать, так это:

button. addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
button2. addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler2);
button3. addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler3);

Хотя, в стороне, вы можете сделать все это с помощью одной функции-обработчика, используя текущий целевой параметр события, чтобы определить, какая кнопка была нажата:

function mouseDownHandler(event:Event):void {
    var url:String;
    //event.currentTarget is a reference to the object that you attached the event listener to
    switch(event.currentTarget){
        case button:
            url = "https://website.com/";
            break;

        case button2:
            url = "https://anotherwebsite.com/";
            break;

        default:
            url = "https://yetanotherwebsite.com/";
    }

    navigateToURL(new URLRequest(url));
}
person BadFeelingAboutThis    schedule 04.06.2018
comment
Хорошо, большое спасибо! Это мой первый раз, когда я использую ActionScript, это кажется такой простой ошибкой! - person mbjb; 05.06.2018