2013-04-30 117 views
0

enter image description hereAS3:如何使用不在显示列表中的类在舞台(显示列表)上处理类的属性?

嗨,大家好,我 对第二阶段的对象,所以我相信他们是在显示列表以及(与progress_mc,Ship_mc)。我有Calculator类,它不代表任何视觉形状或任何东西,但as3代码,因此它不在显示列表中。 什么是使用Progress_mc属性的最佳方式?

示例:Calculator_as必须接收Progress_mc.width任何时间宽度已被更改,经过一些计算后,计算器必须将一些计算结果发送到Ship_mc.x。

我在想如果我必须在舞台上添加Child(计算器),所以我可以访问Calculator.as中的这些MC,但这个类不是可视对象,所以我不确定这是否是正确的方法。 或者我有(下面的代码)为此在计算器类,然后尝试访问属性,但我这样不会工作或者是因为性能不会是实例的舞台上:

private var prg:Progress_mc = new Progress_mc; 

private var ship:Ship_mc = new Ship_mc;  

或者我有将它们添加为计算器的子项并在舞台上添加计算器? 另一个问题是,我不能只使用setter和getter作为计算器中的静态函数,因为“width”属性是只读的,不能用于静态函数(错误:?)

什么是最好的访问这些属性并操纵它们的方式?

非常感谢你们的好人!

回答

1

我假设Calculator实例是有点全局可访问的。在这种情况下,我想你有

public function setProgressMcWidth(width:Number):void {...} 

在Calculator类中。只要progressMc的宽度更新,就需要调用该函数。后来,当计算器需要通过一些宽度shipMc,可以调度的事件,如

package { 
    public class CalculatorEvent extends Event { 
     private var _width:Number = width; 
     public function CalculatorEvent(type:String, width:Number) 
     { 
      super(type); 
      _width = width; 
     } 
     override public function clone():Event { 
      var ret:CalculatorEvent = new CalculatorEvent(type, _width); 
      return ret; 
     } 
     public function getWidth():Number {return _width;} 
    } 
} 

,并有调度代码计算器,如:

dispatch(new CalculatorEvent("shipWidthCalculated", calculatedShipWidth)); 

船舶MC,反过来,会听计算器的事件如:

calculator.addEventListener("shipWidthCalculated", handleShipWidthCalculated); 
private function handleShipWidthCalculated(event:CalculatorEvent):void { 
    trace('calculator calculated my width to be: ' + event.getWidth); 
} 
+0

谢谢catholicon。这一定会奏效。你认为一般的类似问题最好的办法是什么?我是否必须总是使用“合成”方法? – irnik 2013-05-01 00:11:05

+0

据我所知,如果你能证明组合语义是合理的,就应该使用组合。例如按钮在语义上具有标签,所以很好地设计它。否则,如果语义只是指导类型相对独立并且只需要一种通信方式,则控制器对象(可以访问所有内容)应该设置跨这些类型的绑定。 – catholicon 2013-05-01 01:04:18

0

但是,如果计算器实例不在显示列表中,它将不会收到任何事件。