2014-03-29 53 views
0

数据我有一个汽车类这样从两个对象获取OOP AS3

public class Car extends Sprite 
{ 
    private var car :Sprite; 
    private var buttonCar :Sprite; 
    private var _kmh :int; 

    public function Car() 
    { 
     makeCar(); 
     makeButtonCar(); 
    } 
    private function makeCar() : void 
    { 
     car = new Sprite(); 
     car.graphics.beginFill(0x0000FF, 1); 
     car.graphics.drawRect(0, 0, 100, 50); 
     car.x = 100; 
     this.addChild(car); 
    } 
    private function makeButtonCar() : void 
    { 
     buttonCar = new Sprite(); 
     buttonCar.graphics.beginFill(0xFF0000, 1); 
     buttonCar.graphics.drawCircle(0, 0, 25); 
     buttonCar.x = 300; 
     this.addChild(buttonCar); 
     buttonCar.addEventListener(MouseEvent.MOUSE_DOWN, KMH); 
    } 
    private function KMH(e:MouseEvent) : void 
    { 
     _kmh++; 
     trace("kmh: "+_kmh); 
    } 
} 

在Main类我做newCar从汽车类,newCar1和newCar2。

public class OOPVariable extends Sprite 
{ 
    private var newCar1  :Car; 
    private var newCar2  :Car; 

    public function OOPVariable() 
    { 
     newCar1 = new Car(); 
     addChild(newCar1); 

     newCar2 = new Car(); 
     newCar2.y = 100;  
     addChild(newCar2); 

     super(); 
    } 
} 

我想从所有对象newCar获得总可变_kmh时从newCar按钮之一,汽车类和点击鼠标事件仍在。

+1

看看自定义事件抛出。然后,您可以让被点击的汽车发出新的事件,您的主班级可以收听,然后通过将每辆汽车的_kmh变量相加来作出响应。 –

+0

见http://jeffnehlsen.com/2011/02/actionscript-3-custom-events-explained/ –

回答

0

感谢所有您的回复,我使用自定义事件和调度事件像什么森说:d

这是主类,carListener方法从全车汇总所有公里每小时时,按钮按下车

package 
{ 
    import flash.display.Sprite; 

    import support.CarEvent; 
    import support.CarObject; 

    public class OOPCar extends Sprite 
    { 
     private var newCar1 :CarObject; 
     private var newCar2 :CarObject; 

     private var totalKmh :int = 0; 

     private var currentName :String; 

     public function OOPCar() 
     { 
      newCar1 = new CarObject(); 
      newCar1.name = "car1"; 
      newCar1.setKmh(2); 
      addChild(newCar1); 
      newCar1.addEventListener(CarEvent.UPDATE, carListener); 

      newCar2 = new CarObject(); 
      newCar2.name = "car2"; 
      newCar2.setKmh(4); 
      addChild(newCar2); 
      newCar2.addEventListener(CarEvent.UPDATE, carListener); 
      newCar2.y = 100; 
     } 

     private function carListener(e:CarEvent) : void 
     { 
      trace("kmhCar: "+e.kmhCar); 
      totalKmh += e.kmhCar; 
      trace("totalKmh: "+totalKmh); 
      currentName = e.currentTarget.name; 
     } 
    } 
} 

类打个车

package support 
{ 
    import flash.display.Sprite; 
    import flash.events.MouseEvent; 

    public class CarObject extends Sprite 
    { 
     private var car   :Sprite; 
     private var buttonCar :Sprite; 
     private var _kmh  :int; 

     public function CarObject() 
     { 
      makeCar(); 
      makeButtonCar(); 
     } 

     private function makeCar() : void 
     { 
      car = new Sprite(); 
      car.graphics.beginFill(0x0000FF, 1); 
      car.graphics.drawRect(0, 0, 100, 50); 
      car.x = 100; 
      this.addChild(car); 
     } 

     private function makeButtonCar() : void 
     { 
      buttonCar = new Sprite(); 
      buttonCar.graphics.beginFill(0xFF0000, 1); 
      buttonCar.graphics.drawCircle(0, 0, 25); 
      buttonCar.x = 300; 
      this.addChild(buttonCar); 
      buttonCar.addEventListener(MouseEvent.MOUSE_DOWN, update); 
     } 

     public function setKmh(kmh:int) : void 
     { 
      _kmh = kmh; 
     } 

     public function update(e:MouseEvent) : void 
     { 
      dispatchEvent(new CarEvent(CarEvent.UPDATE, true, false, _kmh)); 
     } 
    } 
} 

,这是我的自定义事件

package support 
{ 
    import flash.events.Event; 

    public class CarEvent extends Event 
    { 
     public static const UPDATE:String = "update"; 

     public var kmhCar :int; 

     public function CarEvent(type:String, bubbles:Boolean = false, cancelable:Boolean = false, kmhCar:int = 0) 
     { 
      super(type, bubbles, cancelable); 

      this.kmhCar = kmhCar; 
     } 

     public override function clone() : Event 
     { 
      return new CarEvent(type, bubbles, cancelable, kmhCar); 
     } 

     public override function toString():String 
     { 
      return formatToString("CarEvent", "type", "bubbles", "cancelable", "eventPhase", "kmhCar"); 
     } 
    } 
} 
0

你可以做Nathan说的,或者你可以让你的公里变量公开;

你可以通过mouseEvent访问它。首先,您必须导入flash.utils.getQualifiedClassName

然后你可以使用一个for()循环来让所有的汽车在舞台上,并追踪总KMH。

// traces out the total KMH and num of cars on stage 
// your car class should keep kmh updated 

private function getTotalKMH(e:MouseEvent) :void 
{ 
    var totalCars:int = 0; 
    var KMH:int = 0; 

    for (var i:int = 0; i < stage.numChildren-1; i++) 
    { 
      if (getQualifiedClassName(e.currentTarget) == "Car") 
      { 
       ++totalCars; 
       KMH += getChildByIndex(i).kmh; // ".kmh" is the variable in your car class 
      } 
    } 

    trace("Total Cars: " + totalCars + "\nTotal KMH: " + KMH); 
} 

当然,你可以做的不仅仅是追踪它。

如果需要,您可以将它传递给类作用域变量或函数。