随机添加1个对象到屏幕

时间:2011-12-20 21:46:45

标签: flash actionscript-3 actionscript flash-cs4

在我之前的帖子Adding a object randomly on the screen in as3上,我解释了我的具体情况。但我会再次讨论它。我有一个带有类的框(不是我的文档类。我有一个名为Main的文件,但是这个只是一个引用我的框的AS类。)类名是Box,我的MC框导出为Box。这是代码

这是我主要文件中的主要文件

addEventListener(Event.ENTER_FRAME, createbox);
var _box:Box = new Box;
var boxlimit:int = 2;
function createbox (event:Event):void{
_box = new Box;
_box.x = Math.random()*stage.stageWidth ;
_box.y = Math.random()*stage.stageHeight;
addChild(_box);
}

这是我的Box类

//package {
//  import flash.display.MovieClip;
//  import flash.events.Event;
//  import flash.events.MouseEvent;
//
//  public class Main extends MovieClip {
//      
//      public function Main() {
//          createBox();
//
//      }
//
//      private function createBox():void {
//
//           trace(Math.random()*stage.stageWidth)
//          _box.x = Math.random()*stage.stageWidth ;
//          _box.y = Math.random()*stage.stageHeight;
//          stage.addChild(_box);
//          
//      }
//  }
//}

在我尝试上面的内容之前,这实际上就是课堂上的内容,但我宁愿保留课堂上的所有代码。

有什么建议吗?

3 个答案:

答案 0 :(得分:0)

这是一种方法: 为MovieClip设置类名(导出为actionscript类)时,可以选择为剪辑指定基类。您可以在此基类中添加随机位置代码,如下所示:

public class BoxBase extends MovieClip
{
    public function BoxBase()
    {
        super();
        addEventListener(Event.ADDED_TO_STAGE, _onStaged);
    }

    public function _onStaged(event:Event):void
    {
        this.x = Math.random()*stage.stageWidth;
        this.y = Math.random()*stage.stageHeight;
    }
}

请注意ADDED_TO_STAGE事件侦听器。既然代码在你的MC中,你必须等到它被添加到显示列表(放在舞台上或作为舞台上剪辑的子节点)之后才能引用“stage”变量。

一旦你将BoxBase设置为Box的基类,你可以通过在文档类中放置以下代码,在随机位置创建一个新的Box实例:

var b:Box = new Box();
addChild(b);

答案 1 :(得分:0)

这里的情况与上一个问题相反。在createBox()函数之外声明一个Box变量,因此在函数内重新声明变量不会创建更多的框。

  //It should be something like this, without the
  // need to declare the _box variable outside the
  // function.
  // As dugulous points out you have to make sure that 
  // stage is not null before calling this
  function createbox (event:Event):void
  {  
     if( stage != null )
     {
       var _box = new Box;
       _box.x = Math.random()*stage.stageWidth ;
       _box.y = Math.random()*stage.stageHeight;
       addChild(_box);
     }
  }

在您的示例中,您使用EnterFrame事件添加您的框...您需要多少?一个计时器可以让你更多地控制盒子的数量,也更容易停止。

  var delay:int = 500; // in milliseconds
  var numBoxes:int = 2000; 

  // you could add an optional limit
  var timer:Timer = new Timer( delay , numBoxes );
  // var timer:Timer = new Timer( delay ); would work too

  timer.addEventListener( TimerEvent.TIMER , createBox );
  timer.start();

  //Change createBox() accordingly...
  function createbox (event:TimerEvent):void
  {  
      var _box = new Box;
     _box.x = Math.random()*stage.stageWidth ;
     _box.y = Math.random()*stage.stageHeight;
     addChild(_box);
  }

每当你厌倦了添加盒子时,你只需要调用它

 timer.stop();

答案 2 :(得分:0)

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

  public class Main extends MovieClip
  {
    private var _box:Box;

    public function Main()
    {
        addEventListener(Event.ENTER_FRAME, createbox);         
    }

    private function createbox (event:Event):void
    {
         _box= new Box();
        _box.x = Math.random()*stage.stageWidth ;
        _box.y = Math.random()*stage.stageHeight;
        addChild(_box);
    }
  }
}