需要帮助清理代码 (AS 3.0)

Posted

技术标签:

【中文标题】需要帮助清理代码 (AS 3.0)【英文标题】:Need help cleaning up code (AS 3.0) 【发布时间】:2013-12-22 13:45:42 【问题描述】:

我在让我的代码正常工作时遇到了一些问题。一般来说,我对编码很陌生,对此我已经碰壁了。播放动画时出现错误

(TypeError: Error #2007: Le paramètre child ne doit pas être nul.
at flash.display::DisplayObjectContainer/removeChild()
at muis_fla::MainTimeline/onEnter()

知道这是为什么吗?

this.addEventListener( Event.ENTER_FRAME, onEnter );


function onEnter( e: Event ):void 

if (currentFrame <= 320)

    var s: Snow = new Snow();

    s.x=550*Math.random();
    s.y=0;
    s.width=s.height=9+12*Math.random();// 1 ~ 9

    s.xSpeed=-16+20*Math.random();// -2 ~ 2
    s.ySpeed=16+20*Math.random();// 1 ~ 5

    s.at = -0.001 -0.001*Math.random();
    s.vt = 0;
    this.addChild( s );

    s.addEventListener( Event.ENTER_FRAME, onSnowEnter );

 else 
    if(currentFrame == 321)
        this.removeChild(s);
    




function onSnowEnter( e: Event ):void 
var s:Snow=e.currentTarget as Snow;

s.x+=s.xSpeed;
s.y+=s.ySpeed;

if (s.y>=0) 

【问题讨论】:

【参考方案1】:

有几件事,当您调用“this.removeChild(s)”时,“this”指的是什么?我不懂法语,但在尝试移除孩子时,您似乎收到错误“不是调用者的孩子”。每当我收到该错误时,我都会添加一个 if 条件以确保我要移动的是 event.target 的子项。

【讨论】:

【参考方案2】:
if(currentFrame == 321)
    this.removeChild(s);

s 变量在 IF 的分支 true 中定义。所以当你进入 else BRANCH 时不会实例化

【讨论】:

【参考方案3】:

您的var s:Sprite 声明应在if-conditional 之外。 在您的代码中,如果到达第 321 帧,它会尝试删除一个名为 s 的子节点,但您没有在循环执行中创建它,因为 if 括号被跳过了。

基本上是这样的:

function onEnter( e: Event ):void 

var s: Snow = new Snow();

if (currentFrame <= 320)

    //...

【讨论】:

以上是关于需要帮助清理代码 (AS 3.0)的主要内容,如果未能解决你的问题,请参考以下文章

需要帮助清理 SVG 动画

Publish.net core 3.0 as FDE for win on linux

[ActionScript 3.0] AS3.0和AS2.0的相互通信

with ...as ...

python with as的用法

python with as的用法