Добавление 1 объекта случайным образом на экран - PullRequest
0 голосов
/ 21 декабря 2011

В моем предыдущем посте Добавление объекта случайным образом на экран в 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 голосов
/ 21 декабря 2011

Здесь у вас противоположная ситуация, как в предыдущем вопросе.Вы объявляете переменную Box вне функции createBox (), поэтому повторное выделение переменной внутри функции не создаст больше блоков.

  //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();
0 голосов
/ 21 декабря 2011
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);
    }
  }
}
0 голосов
/ 21 декабря 2011

Вот один из способов: Когда вы устанавливаете имя класса для своего 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);
...