0

在此处输入图像描述

大家好,我在舞台上有两个对象,所以我认为它们也在显示列表中(Progress_mc、Ship_mc)。我有 Calculator 类,它不代表任何视觉形状或除 as3 代码之外的任何东西,因此它不在显示列表中。使用 Progress_mc 的属性的最佳方法是什么?

示例:Calculator_as 必须在任何时间宽度发生变化时接收 Progress_mc.width,并且经过一些计算,Calculator 必须将一些计算结果发送到 Ship_mc.x。

我在想是否必须在舞台上添加Child(Calculator),以便我可以访问 Calculator.as 中的那些 MC,但是这个类不是可视对象,所以我不确定这是正确的方法。或者我必须在 Calculator 类中执行此操作(下面的代码),然后尝试访问属性,但我这种方式也行不通,因为属性不会是舞台上的实例:

private var prg:Progress_mc = new Progress_mc;

private var ship:Ship_mc = new Ship_mc;    

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

访问这些属性和操作它们的最佳方式是什么?

非常感谢你们这些好人!

4

2 回答 2

1

我假设 Calculator 实例是全局可访问的。在那种情况下,我认为你有

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

在计算器类。每当更新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));

Ship mc 反过来会监听计算器的事件,例如:

calculator.addEventListener("shipWidthCalculated", handleShipWidthCalculated);
private function handleShipWidthCalculated(event:CalculatorEvent):void {
    trace('calculator calculated my width to be: ' + event.getWidth);
}
于 2013-04-30T23:29:09.527 回答
0

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

于 2013-05-01T01:54:52.590 回答