我尝试从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中的编码很新,我只是在学习。 此外,欢迎任何有关如何清理它的有用建议!
答案 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);
我对此非常生疏,所以如果不能解决你的问题,请告诉我。