你好,伙计们, 我在舞台上有两个对象,所以我认为它们也在显示列表中(Progress_mc,Ship_mc)。我有计算器类,它不代表任何视觉形状或任何东西,但as3代码,所以它不在显示列表中。 使用Progress_mc属性的最佳方法是什么?
示例:Calculator_as必须在任何时间宽度更改后接收Progress_mc.width,并且在计算完成后计算器必须将一些计算结果发送到Ship_mc.x。
我在想我是否必须在舞台上添加孩子(计算器),这样我就可以访问Calculator.as中的那些MC,但是这个类不是可视对象所以我不确定这是正确的方法。 或者我必须在Calculator类中执行此操作(下面的代码),然后尝试访问属性,但我这样做也不会因为属性不会是舞台上的实例:
private var prg:Progress_mc = new Progress_mc;
private var ship:Ship_mc = new Ship_mc;
或者我必须将它们添加为计算器的子项并在舞台上添加计算器? 另一个问题是我不能只使用setter和getter作为Calculator中的静态函数,因为“width”属性是只读的,不能在静态函数中使用(错误:?)
访问这些属性并操纵它们的最佳方法是什么?
非常感谢你们!
答案 0 :(得分: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);
}
答案 1 :(得分:0)
但是如果计算器实例不在显示列表中,它将不会收到任何事件。