2011-12-20 2 views
0

Dans mon précédent article Adding a object randomly on the screen in as3 J'ai expliqué les détails de ma situation. Mais je reviendrai dessus. J'ai une boîte avec une classe (pas ma classe de document, j'en ai une appelée Main mais celle-ci est juste une classe AS référençant ma boîte.) Le nom des classes est Box et ma boîte MC est exportée en tant que Box. Voici le codeAjouter 1 objet de manière aléatoire à l'écran

c'est dans mon dossier principal sur la principale timline

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); 
} 

Ceci est ma classe 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); 
//   
//  } 
// } 
//} 

Ce fut actualy ce qui était sur la classe avant d'essayer ce qui était ci-dessus mais je préfère garder tout le code dans la classe.

Des suggestions?

+0

Juste pour être sûr, vous voulez créer une classe qui ajoutera une nouvelle instance de votre 'Box 'item de bibliothèque au hasard sur la scène. Donc vous devrez juste appeler 'new Box()' pour que ça marche, n'est-ce pas? –

Répondre

0

Voici comment procéder: Lorsque vous définissez le nom de classe de votre MovieClip (export en tant que classe actionScript), vous avez la possibilité de spécifier une classe de base pour le clip. Vous pouvez ajouter votre code de position aléatoire dans cette classe de base comme ceci:

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; 
    } 
} 

Notez le écouteur d'événement ADDED_TO_STAGE. Maintenant que le code est dans votre MC, vous devez attendre qu'il ait été ajouté à la liste d'affichage (placé sur la scène ou en tant qu'enfant d'un clip sur la scène) avant de pouvoir référencer la variable "stage".

Une fois que vous avez défini BoxBase être la classe de base pour la boîte, vous pouvez créer une nouvelle instance de boîte à une position aléatoire en plaçant le code suivant dans votre classe de document:

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

Ici vous avez la situation inverse comme dans votre question précédente. Vous déclarez une variable Box en dehors de la fonction createBox(), donc la redéclaration de la variable dans la fonction ne créera pas plus de boîtes. Dans votre exemple, vous utilisez un événement EnterFrame pour ajouter vos boîtes ... Combien en avez-vous besoin? Un minuteur vous donnerait plus de contrôle sur le nombre de boîtes et il est également plus facile d'arrêter.

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); 
    } 

Chaque fois que vous vous ennuyez avec l'ajout de boîtes, vous appelez simplement ce

timer.stop(); 
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); 
    } 
    } 
} 
Questions connexes