2012-02-10 74 views
1

感谢stackoverflow社区,我可以在昨天解决我flash项目中的一些问题。我仍然收到错误消息,但它来自网站中的不同行为。这是我得到的错误消息:Error 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] 

第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

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

更换有问题的行(27)确保父竟先存在。

你也想删除事件监听器,以防止可怕的内存泄漏。

在重新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 2012-02-10 04:22:44

+0

@jpl你需要包含相关的代码才能获得任何建设性的帮助..你提供的代码没有任何问题,除了这个答案和我的答案涵盖。 – Marty 2012-02-10 04:24:45

+0

@ Marty Wallace。与此代码相关的两个不同页面的代码显示在我昨天问的问题中。对不起,如果它是漫长而痛苦的阅读。你可以找到它[这里](http://stackoverflow.com/questions/9205818/error-1009-actionscript-3) – jpl 2012-02-10 04:36:42

1

尝试:

if(parent) 
    parent.removeChild(this);