Ошибка 1009, MethodInfo-6 () - PullRequest
       21

Ошибка 1009, MethodInfo-6 ()

1 голос
/ 10 февраля 2012

Благодаря сообществу stackoverflow, я мог бы решить некоторые проблемы в моем проекте Flash вчера.Я все еще получаю сообщение об ошибке, но это происходит из-за другого поведения на веб-сайте.Это сообщение об ошибке, которое я получаю:

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

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

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

TypeError: Error #1009: Cannot access a property or method of a null object
reference.at Snowflake/update()[C:\Users\JPL\Documents\ranchleblanc\New Ranch
Leblanc\website 2012\Snowflake.as:27]

Это строка 27 в следующем коде: "parent.removeChild (this);"

Я искал в интернете способ исправить это, и я застрял,Вот код снежных хлопьев.Этот видеоклип воспроизводится внутри другого фрагмента.

package
{
import flash.display.MovieClip;
import flash.events.Event;

public class Snowflake extends MovieClip
{
    var yVel:Number;
    var xVel:Number;
    var stageheight:Number = 405;

    function Snowflake(xvel:Number, yvel:Number)
    {
        yVel = yvel;
        xVel = xvel;
        this.addEventListener(Event.ENTER_FRAME, update);
    }

    function update(e:Event):void
    {
        this.x += xVel;
        this.y += yVel;

        if (this.y > stageheight)
        {
            this.removeEventListener(Event.ENTER_FRAME, update);
            parent.removeChild(this);
        }
    }
}
}

Кто-нибудь может указать мне правильное направление?

Ответы [ 2 ]

2 голосов
/ 10 февраля 2012

заменить ошибочную строку (27) на

if(parent){
   parent.removeChild(this);
   this.removeEventListener(Event.ENTER_FRAME, update);
}

убедитесь, что родитель действительно существует первым.

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

В методеInfo-6 ()

Итак, я уже видел такое сообщение раньше, но это было давно. MethodInfo-функции - это действительно внутренние функции в Flash Player, и они не должны вызывать у вас ошибки ... Если память мне не изменяет, я столкнулся с этим в коде, написанном кем-то другим, в котором они пытаются выполнить действие с помощью SWF который еще не загружен ... или, возможно, выполняет действие из загруженного SWF-файла, которое он еще не мог выполнить во время вызова кода.

Итак, давайте посмотрим, сможем ли мы немного разобраться с вашими проблемами.

Внутри вашего файла acuiel_fla у вас есть несколько вещей, которые вы делаете в кадре 1, которые предполагают, что acuiel_fla является основной временной шкалой , которой не будет! Попробуйте что-то вроде этого ...

// on frame 1...
// first, check if you even have a stage.  If not, wait to be added!
if(stage){
    init();
}else{
    this.addEventListener(Event.ADDED_TO_STAGE, init);
}


// MOVE THE addEventListener call for ENTER_FRAME here!
function init(e:Event = null):void{
    this.addEventListener(Event.ENTER_FRAME, newFlake);
    this.addEventListener(Event.REMOVED_FROM_STAGE, removedFromStage);
}

// AND REMOVE the ENTER_FRAME listener if you are ever removed
// from the stage.
function removedFromStage(e:Event):void{
    this.removeEventListener(Event.ENTER_FRAME, newFlake);
}

function randRange(low:Number, high:Number):Number
{
    var randNum:Number = Math.random() * (high - low) + low;
    return randNum;
}

//    DO NOT CALL IT HERE.
//this.addEventListener(Event.ENTER_FRAME, newFlake);

function newFlake(e:Event):void
{
    if(!stage) return; // we are not on stage so we can't
                       // do anything here!


    var flake:Snowflake = new Snowflake(randRange(-1,1), randRange(2,5));
    flake.x = Math.random() * stage.stageWidth;
    flake.y = -5;
    flake.alpha = randRange(.3,1);
    flake.scaleX = flake.scaleY = randRange(.3,1);
    addChild(flake);
}

// do not instantiate your new flake here... just leave it for the enterframe.
1 голос
/ 10 февраля 2012

Попробуйте:

if(parent)
    parent.removeChild(this);
...