2012-02-10 2 views
1

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

TypeError: Error #1009: Cannot access a property or method of a null object reference. 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] 

Line 27 это один в следующем коде: «parent.removeChild (это); "

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

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

заменить обижая линию (27) с

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

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

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

В ре MethodInfo-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. 
+0

Большое спасибо. Это зафиксировало второе сообщение об ошибке, которое у меня было. Строка 27 больше не генерирует исключение. Но я все еще получаю сообщение в MethodInfo-6(). Вы хоть представляете, что это? – jpl

+0

@jpl Вам нужно будет включить соответствующий код, чтобы иметь возможность получить конструктивную помощь. У вашего предоставленного кода нет никаких проблем, кроме ответа на этот вопрос и моего ответа. – Marty

+0

@ Марти Уоллес. Код для двух разных страниц, связанных с этим кодом, отображается в вопросе, который я задал вчера. Извините, если долго и больно читать. Вы можете найти его [здесь] (http://stackoverflow.com/questions/9205818/error-1009-actionscript-3) – jpl

Смежные вопросы