AS3:如何从不在显示列表中的类处理舞台(显示列表)上的类的属性?

时间:2013-04-30 22:53:54

标签: actionscript-3 properties displayobject

enter image description here

你好,伙计们, 我在舞台上有两个对象,所以我认为它们也在显示列表中(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”属性是只读的,不能在静态函数中使用(错误:?)

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

非常感谢你们!

2 个答案:

答案 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)

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