ActionScript 3动态StarField

时间:2014-05-05 02:07:26

标签: flash actionscript

我遵循本教程http://www.flash-game-design.com/flash-tutorials/dynStar-flash-tutorial.html。我一直收到不明方法的错误,

这是我的代码,

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

for(var i = 0; i<stars; i++){
    var mc = this.attachMovie("star", "star"+i,i);
    mc._x = random(Stage.width);
    mc._y = random(Stage.height);

    mc.speed = random(maxSpeed-minSpeed)+minSpeed
    var size = random(2)+0.6*(random(4));
    mc._width = size;
    mc._height = size;
}

this.onEnterFrame = function(){
    for(var j=0; j<stars;j++){
        var mc = this["star"+j];
        if (mc._y>0){
            mc._y -= mc.speed ;
        } else{
            mc._y = stage.height;
            mc.speed = random(maxSpeed-minSpeed)+minSpeed
            mc._x = random(Stage.width);
        }

    }
}

2 个答案:

答案 0 :(得分:0)

也许您没有正确地将您的影片剪辑链接到库中,以使实例/标识符名称为“星号”,在这种情况下请查看该教程的第一部分。

另一种可能性是“随机”方法实际上已被弃用,因此根据您的Flash播放器版本,它可能无效。请尝试使用Math.random。

答案 1 :(得分:0)

实际上问题是该教程是AS2,并且很多代码都没有转换为as3。最重要的是用Math.random()替换“随机”,attachMovie&amp;带有DisplayObjectContainer类的event.enterFrame,带有x&amp;的_x&amp; _y年。

我已经更新了大部分代码,我唯一的问题是我不知道如何处理这一行:

var mc = this.attachMovie(“star”,“star”+ i,i);

我知道我需要创建一个变量和addChild,但我不确定如何从一个生成多个影片剪辑。我认为addChild只能用于1件事。所以如何解决这个工作的任何帮助都会很棒。我去的时候只是想自学。

目前已更新为:

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 = this.attachMovie("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;

        }
    }
};