Skip to main content
Inspiring
September 17, 2009
Question

Constructor in document class runs twice?

  • September 17, 2009
  • 1 reply
  • 725 views

Hi Folks,

I'm working on my document class and the contructor is running twice, hence it is running almost all of my code twice.  I'm not quite sure why this is the case.  Any help is appreciated.

I've attached my code below.

package {

import flash.display.MovieClip;
import flash.display.DisplayObject;
import flash.events.*;
import flash.geom.*;
import flash.net.*;
import flash.utils.getDefinitionByName;

public class ASIFL048_DND extends MovieClip {

  private var startDragX:Number = new Number();
  private var startDragY:Number = new Number();
  private var xmlPath:String = "../ObjectFiles/xmlIFL0480016.xml";
  private var itemList:Array = new Array();
  private var targetList:Array = new Array();
  private var gameArray:Array = new Array();
  private var myXML:XML = new XML();
  private var myTargetName:String = new String();
  private var XMLLoader:URLLoader = new URLLoader();
  private var XMLRequest:URLRequest = new URLRequest(xmlPath);
 
  trace("RUNNING ONCE!");

  public function ASIFL048_DND() {
   stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
   stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
   XMLLoader.addEventListener(Event.COMPLETE, completeHandler);
   trace("RUNNING TWICE?");
   loadXML();
  }
  private function loadXML():void {
   //var XMLLoader:URLLoader = new URLLoader();
   //var XMLRequest:URLRequest = new URLRequest(xmlPath);
   XMLLoader.load(XMLRequest);
   //XMLLoader.addEventListener(Event.COMPLETE, completeHandler);
  }
  private function completeHandler(e:Event):void {
   myXML = XML(e.target.data);
   var i:int = 0;
   var j:int = 0;
   for each (var item:XML in myXML..equip) {
    itemList = item.@name;
    for each (var target:XML in item..myTarget) {
     targetList = [i,target];
     j++;
    }
    i++;
   }
   //trace(targetList);
   selectDragItems(10);
  }
  private function selectDragItems(gameLength:int):void {
   var randomSeed:Number = new Number();
   var randomItem:Number = new Number();
   for (var k:int = 0; k<gameLength; k++) {
    randomSeed = targetList.length;
    randomItem = Math.floor(Math.random() * targetList.length);
    gameArray = targetList.splice(randomItem, 1);
    trace(gameArray+"\n");
    //display game array
    //trace("CLASS:\t"+itemList[gameArray[0][0]]);
         //var ClassReference:Class = getDefinitionByName(itemList[gameArray[0]]) as Class;
    //var instance:Object = new ClassReference();
    //addChild(DisplayObject(instance));
   }
  }
 
  private function mouseDownHandler(e:MouseEvent):void {
   startDragX = e.target.x;
   startDragY = e.target.y;
   trace(startDragX + " " + startDragY);
   e.target.startDrag(true,new Rectangle(e.target.width/2,e.target.height/2, stage.stageWidth-e.target.width, stage.stageHeight-e.target.height));
  }

  private function mouseUpHandler(e:MouseEvent):void {
   stopDrag();
   myTargetName = "fwdLHWindscreen_mc";
   var myTarget:DisplayObject = getChildByName(myTargetName);
   //trace(" TARGET VAR: "+myTarget.name);
   if (e.target.dropTarget != null && e.target.dropTarget.parent == myTarget) {
    trace("correct");
    e.target.x = e.target.dropTarget.parent.x;
    e.target.y = e.target.dropTarget.parent.y;
    e.target.removeEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
    e.target.removeEventListener(MouseEvent.MOUSE_UP,mouseUpHandler);
   } else {
    trace("incorrect");
    e.target.x = startDragX;
    e.target.y = startDragY;
   }
  }
}

}

This topic has been closed for replies.

1 reply

September 17, 2009

The first trace statement is not in the constructor. In fact, your trace output should be:

RUNNING TWICE?

RUNNING ONCE!

September 17, 2009

My bad. The order of output is:

RUNNING ONCE!

RUNNING TWICE?

The first trace is a static initializer, while the second is in the constructor.

Scottie0Author
Inspiring
September 17, 2009

Hi Raymond,

I managed to resolve the problem, but I don't understand why it worked.  I had content on my stage. I deleted it and then the constructor ran only once...?

Scott