获取TypeError#1123:类型不支持过滤运算符,MainTimeline / enterFrameHandler()

时间:2015-03-30 18:59:00

标签: actionscript-3 flash actionscript-2

我尝试从AS2获取星级字段的旧教程并将其移至AS3。我不再收到任何编译器错误,但我收到了TypeError

以下是代码:

this.addEventListener(Event.ENTER_FRAME, enterFrameHandler);

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

var stars = 100;
var maxSpeed = 16;
var minSpeed = 2;

for( var i = 0; i<stars; i++)
{
    var mc:MovieClip = new MovieClip();
    addChild(mc);
    mc.name = "star","star"+i,i;
    mc.x = Math.random() * stage.stageWidth;
    mc.y = Math.random() * stage.stageHeight;
    mc.speed = Math.random() * (maxSpeed-minSpeed)+minSpeed
    var size = Math.random() * 2+(0.6*(Math.random() * 4));
    mc.width = size;
    mc.height = size;
}

function enterFrameHandler(event:Event):void
{
    var target:MovieClip = MovieClip(event.target);
    for (var j = 0; j<stars;j++)
    {
        var mc = this.("star"+j);
        if (mc.y>0)
        { 
            mc.y -= mc.speed;
        }
        else
        {
            mc.y = stage.stageHeight;
            mc.speed = Math.random() * (maxSpeed-minSpeed)+minSpeed;
            mc.x = Math.random() * stage.stageWidth;

        }
    }
};

我得到的TypeError是:

  

TypeError:错误#1123:类型不支持过滤器运算符   SpaceBoost_loadscreen_star_fla.MainTimeline。在   SpaceBoost_loadscreen_star_fla :: MainTimeline / enterFrameHandler()

我对Actionscript中的编码很新,我只是在学习。 此外,欢迎任何有关如何清理它的有用建议!

1 个答案:

答案 0 :(得分:0)

快速浏览后我看到两个问题:

问题1:

在您的第一个for循环中,此行:mc.name = "star","star"+i,i;

每个项目的名称最终都是相同的(“星号”),因为在逗号之后它只是一个字符串文字命令(假设这不会引发错误)。

通过将其更改为:

来更正
mc.name = "star" + i;

第2期

什么是当前错误,var mc = this.("star"+j); 在AS3中,object.(expression)是E4X过滤。要通过实例名称访问对象,请执行以下操作:

var mc = getChildByName("star" + j);

我对此非常生疏,所以如果不能解决你的问题,请告诉我。