Ошибка типа: Ошибка № 1009 - AS3 - PullRequest
0 голосов
/ 26 марта 2011

Я получаю эту ошибку:

TypeError: Error #1009: Cannot access a property or method of a null object reference.
    at Lemonade_fla::MainTimeline/frame3()[Lemonade_fla.MainTimeline::frame3:48]

Из этого фрагмента кода:

buy_sugar.addEventListener(MouseEvent.CLICK, buysugar);
function buysugar(event:MouseEvent):void{
    if (cash1>=0.50){
        buy.play();
        cash1 = cash.text.text;
        cash1 = cash1 - 0.25;
        sugar = sugar_count.text;
        sugar=sugar+16;
    }
}

У кого-нибудь естьидеи почему?

Ответы [ 3 ]

2 голосов
/ 26 марта 2011

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

Вы абсолютно уверены, что buy_sugar существует в том же кадре, что и выполняемый вами вызов?

Допустим, вы находитесь в кадре 3 ...

buy_sugar.addEventListener(Event.FOO, onFoo); // if buy_sugar exists on frame 3, this works.

Но что, если вы находитесь во 2-м кадре?

gotoAndStop(3);
buy_sugar.addEventListener(Event.FOO, onFoo); // problem... this can fail if buy_sugar exists on 3 but NOT on 2.

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

РЕДАКТИРОВАТЬ ::

Эти фотографии довольно интересные.Похоже, что buy_sugar является символом мувиклипа, который существует в кадре 3, но buy_sugar отслеживает как ноль в вашем сценарии кадра 3.Вот несколько советов для дальнейшей отладки.

  1. В коде, где у вас есть trace (buy_sugar); замените его на trace ("тестирование наличия buy_sugar", buy_sugar, currentFrame);

  2. ВЫРЕЗАТЬ видеоклип buy_sugar со своего места на сцене.Создайте новый слой ниже всех остальных и вставьте buy_sugar в ключевой кадр в кадре 1. Не добавляйте ЛЮБЫЕ другие ключевые кадры на этом слое.Цель состоит в том, чтобы убедиться, что buy_sugar существует всегда, во всех кадрах.

    Дайте мне знать, что вы увидите, когда будете делать это.

РЕДАКТИРОВАТЬ

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

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

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

Один из элементов еще не определен (или определен в частном порядке где-то еще).

Предполагая, что это правильный фрагмент кода, это либо buy, cash, cash.text, или sugar_count, потому что это те объекты, к которым вы пытаетесь обратиться к свойству или методу с точечным синтаксисом (.).

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

Полагаю, что:

  1. объект "покупка" не создан
  2. "денежный" объект не создан
  3. "cash.text" не создан

Вы можете попробовать это:

if(buy)
    buy.play();
else
    trace("buy object is null");

if(cash && cash.text)
    cash1 = cash.text.text;
else
    trace("cash object is null");

Не могли бы вы поподробнее?

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