Помощь - Ошибка нулевого объекта при использовании stage.addEventListener (ScrollBar) - PullRequest
2 голосов
/ 07 октября 2009

Привет, ребята, надеясь на некоторую помощь в этом :( застрял на нем пару дней.

Я создаю ScrollBar с использованием класса Ли Бримелоу ScrollBar . Мне пришлось изменить его, чтобы он работал внутри моих файлов классов и думал, что я на правильном пути, но меня пугает:

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

Когда я запускаю отладку, он попадает в строку, где у меня есть rollerUp);

КОД ИЗ КЛАССА СКРОЛБАР:

import flash.display.*;
import flash.events.*;
import caurina.transitions.*;

public class ScrollBar extends MovieClip
{
    private var yOffset:Number;
    private var yMin:Number;
    private var yMax:Number;
    private var thumbsnailTab:MovieClip;
    private var theRoller:MovieClip;

    public function ScrollBar(myRoller:MovieClip, myTrack:MovieClip, thumbsnails:MovieClip):void
    {
        yMin = 0;
        yMax = myTrack.height - myRoller.height;
        theRoller = myRoller;
        thumbsnailTab = thumbsnails;
        myRoller.addEventListener(MouseEvent.MOUSE_DOWN, rollerDown);
        stage.addEventListener(MouseEvent.MOUSE_UP, rollerUp);
    }

Вот что показывает мой отладчик:

alt text

Сначала я не был уверен, является ли ссылка на этап причиной ошибки или функцией rollerUp, но, поскольку я закомментировал stage.removeEventListener и добавил базовый оператор трассировки, он все равно выдает ошибку, поэтому я считаю это как-то связано с:

stage.addEventListener(MouseEvent.MOUSE_UP, rollerUp);

Теперь я импортировал события. *; в класс ScrollBar ... может быть, проблема в моем основном классе, где я создаю графику для ScrollBar, а также добавляю ScrollBar в список отображения?

КОД ИЗ ГЛАВНОГО КЛАССА:

// Creating Graphics
        track1 = new Track;
        track1.x = 0;
        track1.y = 0;

        roller1 = new Roller;
        roller1.x = 0;
        roller1.y = 0;

        sc1 = new EmptyMov;
        sc1.x = 764;
        sc1.y = 470;

        sc1.addChild(track1);
        sc1.addChild(roller1);

// Adding ScrollBar to Stage
scroll1 = new ScrollBar(roller1, track1, tab1);
container.addChild(sc1);
container.addChild(scroll1);
addChild(container);

Я застрял здесь, не уверен, почему я получаю эту ошибку ссылки Null, а также не уверен, правильно ли я создаю графику, а также правильно ли использую класс ScrollBar :( любые советы приветствуются!

alt text


Обновление кода работает! : D

public function ScrollBar(myRoller:MovieClip, myTrack:MovieClip, thumbsnails:MovieClip):void
    {
        yMin = 0;
        yMax = myTrack.height - myRoller.height;
        theRoller = myRoller;
        thumbsnailTab = thumbsnails;
        myRoller.addEventListener(MouseEvent.MOUSE_DOWN, rollerDown);
    }

    private function rollerDown(e:MouseEvent):void
    {
        stage.addEventListener(MouseEvent.MOUSE_UP, rollerUp);
        stage.addEventListener(MouseEvent.MOUSE_MOVE, rollerMove);
        yOffset = mouseY - theRoller.y;
    }

alt text

Ответы [ 3 ]

5 голосов
/ 07 октября 2009

Ваша сцена пуста, потому что вновь созданный объект еще не находится на сцене. Чтобы обойти это, используйте слушатель ADDED_TO_STAGE в конструкторе, который затем добавляет ваши сценические события.

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

Я думаю, что ваша проблема в том, что stage = null. Причина может быть только одна: вы пытаетесь добраться до стадии, когда MC не добавлен к нему (тогда ссылка нулевая).

2 голосов
/ 07 октября 2009

Я также согласен с Конрадом. Лучше начинать событие MOUSE_UP при захвате события MOUSE_DOWN.

так переместите

stage.addEventListener(MouseEvent.MOUSE_UP, rollerUp);

внутри функции rollerDown.

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