Кнопки Flash не работают: ошибка типа: ошибка № 1009: невозможно получить доступ к свойству или методу ссылки на пустой объект - PullRequest
0 голосов
/ 01 июня 2010

Я прочитал несколько веток об этой ошибке, но не смог применить ее, чтобы выяснить мою ситуацию ...

Мой флэш-файл - это анимация продолжительностью около 5 секунд. Затем последний ключевой кадр каждого слоя (кадр № 133) содержит кнопку. Мой флэш-файл должен остановиться на этом последнем ключевом кадре, и вы сможете нажать любую из 6 кнопок, чтобы перейти на другую HTML-страницу на моем веб-сайте.

Вот сценарий действия, который я применил к кадру, в котором существуют кнопки (на отдельном слое см. Скриншот по адресу: http://www.footprintsfamilyphoto.com/wp-content/themes/Footprints/images/flash_buttonissue.jpg

stop ();


function babieschildren(event:MouseEvent):void 
{ 
    trace("babies children method was called!!!");
    var targetURL:URLRequest = new URLRequest("http://www.footprintsfamilyphoto.com/portfolio/babies-children"); 
    navigateToURL(targetURL, "_self"); 
}

bc_btn1.addEventListener(MouseEvent.CLICK, babieschildren);
bc_btn2.addEventListener(MouseEvent.CLICK, babieschildren);


function fams(event:MouseEvent):void 
{ 
    trace("families method was called!!!");
    var targetURL:URLRequest = new URLRequest("http://www.footprintsfamilyphoto.com/portfolio/families"); 
    navigateToURL(targetURL, "_self"); 
}

f_btn1.addEventListener(MouseEvent.CLICK, fams);
f_btn2.addEventListener(MouseEvent.CLICK, fams);


function couplesweddings(event:MouseEvent):void 
{ 
    trace("couples weddings method was called!!!");
    var targetURL:URLRequest = new URLRequest("http://www.footprintsfamilyphoto.com/portfolio/couples-weddings"); 
    navigateToURL(targetURL, "_self"); 
}

cw_btn1.addEventListener(MouseEvent.CLICK, couplesweddings);
cw_btn2.addEventListener(MouseEvent.CLICK, couplesweddings);

Когда я тестирую фильм, я получаю эту ошибку в поле вывода:

TypeError: Ошибка # 1009: невозможно получить доступ к свойству или методу с нулевым значением ссылка на объект.

Тестовый фильм останавливается на соответствующем кадре, но кнопки ничего не делают (URL-адрес не открывается, а операторы трассировки не отображаются в окне вывода при нажатии кнопок в тестовом фильме) .

Вы можете просмотреть файл .swf здесь: www.footprintsfamilyphoto.com/portfolio

Я уверен, что все 6 кнопок существуют в соответствующем кадре (кадр 133), поэтому я не думаю, что именно это вызывает ошибку 1009.

Я также пытался удалить каждый из трех разделов function / addEventListener по одному и тестировать, и я все равно получал ошибку 1009 каждый раз. Если я удаляю ВСЕ сценария действия, кроме строки «stop ()», я НЕ получаю ошибку 1009.

Есть идеи? Я очень новичок во Flash, поэтому, если я не уточнил что-то, что мне нужно, дайте мне знать!


Обновление: у меня возникает ощущение, что это как-то связано с конструкцией моего файла, а не с самим кодом - если у кого-то есть предложения по дополнительным скриншотам / информации, которые я мог бы здесь включить, это может помочь выявить любые конструктивные недостатки , дайте мне знать, и я буду рад захватить / опубликовать их. Я просто не уверен, что искать в качестве источника ошибки 1009? Я подтвердил и подтвердил имена своих экземпляров ... все кнопки существуют в одном кадре, где расположен сценарий действия (кадр 133). я не импортирую какие-либо внешние объекты ...

Любые предложения приветствуются!

Ответы [ 3 ]

2 голосов
/ 28 сентября 2012

У меня была точно такая же ошибка, и я читал здесь что-то о том, что swf не догоняет экземпляр кнопки вовремя, даже если он находится в том же кадре, и это было точно.

Я просто расширил кнопку на 1 кадр перед actionScript и сработал!

0 голосов
/ 15 июля 2010

Большое спасибо за ваш ответ! Если бы у меня была копия CS3, я был бы более чем готов вернуться, учитывая головную боль, которую CS4 давал мне!

В итоге я отправил файл другу / флеш-гуру, чтобы исправить. Вставьте свой ответ здесь, если он кому-нибудь пригодится!

Если честно, я немного удивлен, что он делает это с вами, тем более что я могу без проблем запускать программу из среды разработки Flash - проблема возникает только тогда, когда вы действительно запускаете swf извне.

Вы определенно были на правильном пути, проверяя экземпляры кнопок. Кажется, что, поскольку кнопки добавляются в этот фрейм, примерно в то же время, когда должен выполняться скрипт фрейма, он просто выходит из строя. Поэтому он пытается вызвать addEventListener для кнопок, прежде чем программа узнает, что они существуют.

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

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

import flash.events.Event;

stop ();

//listen for the Flash player's ENTER_FRAME event...
this.addEventListener(Event.ENTER_FRAME, onEnterFrame, false);

//and call this checker function continually until all of the buttons are accounted for
function onEnterFrame(e:Event):void {
 if (bc_btn1 != null && bc_btn2 != null && f_btn1 != null && f_btn2 != null && cw_btn1 != null && cw_btn2 != null){
  bc_btn1.addEventListener(MouseEvent.CLICK, babieschildren);
  bc_btn2.addEventListener(MouseEvent.CLICK, babieschildren);

  f_btn1.addEventListener(MouseEvent.CLICK, fams);
  f_btn2.addEventListener(MouseEvent.CLICK, fams);

  cw_btn1.addEventListener(MouseEvent.CLICK, couplesweddings);
  cw_btn2.addEventListener(MouseEvent.CLICK, couplesweddings);

  //clean up the enter frame listener so that this function no longer gets called
  this.removeEventListener(Event.ENTER_FRAME, onEnterFrame, false);
 }
}



function babieschildren(event:MouseEvent):void 
{ 
    trace("babies children method was called!!!");
    var targetURL:URLRequest = new URLRequest("http://www.footprintsfamilyphoto.com/portfolio/babies-children"); 
    navigateToURL(targetURL, "_self"); 
}


function fams(event:MouseEvent):void 
{ 
    trace("families method was called!!!");
    var targetURL:URLRequest = new URLRequest("http://www.footprintsfamilyphoto.com/portfolio/families"); 
    navigateToURL(targetURL, "_self"); 
}


function couplesweddings(event:MouseEvent):void 
{ 
    trace("couples weddings method was called!!!");
    var targetURL:URLRequest = new URLRequest("http://www.footprintsfamilyphoto.com/portfolio/couples-weddings"); 
    navigateToURL(targetURL, "_self"); 
}
0 голосов
/ 06 июня 2010

Я перестроил ваш пример с использованием CS3, и, по крайней мере, для меня, он работает как положено и ваш код также выглядит правильно .. единственное, что я мог себе представить, это то, что имя экземпляра отсутствует (например, "bc_btn1") на КАЖДОЙ КЛАВИШЕ в вашей временной шкале.

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

привет

...