Actionscript 3 从另一个对象访问对象参数actionscript3

Actionscript 3 从另一个对象访问对象参数actionscript3,actionscript-3,Actionscript 3,在以下视频中: 他有两个对象通信的实例,这两个对象都是从Flash profession创建的,它们只是使用点符号“交谈” 我的程序动态创建对象,如何在创建的实例中从一个类到另一个类进行通信?创建可以来自main.as文件,也可以来自从main创建的对象中 这可能吗?如果无法保持对象引用,则可能需要第三个类作为对象之间的桥梁 这里有一个例子 public class NotifyMgr { private static var _instance:NotifyMgr = new Not

在以下视频中:

他有两个对象通信的实例,这两个对象都是从Flash profession创建的,它们只是使用点符号“交谈”

我的程序动态创建对象,如何在创建的实例中从一个类到另一个类进行通信?创建可以来自main.as文件,也可以来自从main创建的对象中


这可能吗?

如果无法保持对象引用,则可能需要第三个类作为对象之间的桥梁

这里有一个例子

public class NotifyMgr
{
    private static var _instance:NotifyMgr = new NotifyMgr();

    public static function getInstance():NotifyMgr
    {
         return _instance;
    }

    //send a message
    public function sendMessage(msgType:String, data:*):void
    {

        var observers:Vector.<IObserver> = notifies[msgType] as Vector.<IObserver>;

        if (observers == null)
        {
              return;
        }

        for each (var obj:IObserver in observers)
        {
             obj.notify(msgType, data);
        }
    }

    private var notifies:Dictionary = new Dictionary();

    //regiter a observer by msgType
    public function register(msgType:String, obj:IObsever):void
    {
         if (notifies[msgType] == null)
         {
             notifies[msgType] = new Vector.<IObserver>();
         }

         var observers:Vector.<IObserver> = notifies[msgType] as Vector.<IObserver>;

         if (obj != null && observers.indexOf(obj) == -1)
         {
              observers.push(obj);
         }
    }

    public function unRegister(msgType:String, obj:IObserver):void
    {
    }

}

/**
 *Your object should implement this interface
 */
public interface IObserver
{
    function notify(msgType:String, data:*):void;
}
公共类NotifyMgr
{
私有静态var_实例:NotifyMgr=new NotifyMgr();
公共静态函数getInstance():NotifyMgr
{
返回_实例;
}
//发送消息
公共函数sendMessage(msgType:String,数据:*):void
{
var观察员:向量。=通知[msgType]为向量。;
如果(观察员==null)
{
返回;
}
对于每个(var obj:观察者中的IObserver)
{
对象通知(MSG类型、数据);
}
}
private var通知:Dictionary=newdictionary();
//通过msgType注册观察者
公共函数寄存器(msgType:String,obj:IObsever):void
{
如果(通知[msgType]==null)
{
通知[msgType]=新向量。(;
}
var观察员:向量。=通知[msgType]为向量。;
if(obj!=null&&observer.indexOf(obj)=-1)
{
观察者:推送(obj);
}
}
公共函数注销(msgType:String,obj:IObserver):void
{
}
}
/**
*您的对象应该实现这个接口
*/
公共接口IObserver
{
函数notify(msgType:字符串,数据:*):void;
}

因此,您可以创建对象A和b来实现接口IObserver,并在NotifyMgr中注册A,在b中调用NotifyMgr.sendMessage,然后A就会知道它。

在本例中,Main是您的文档类,Die是Sprite类的扩展。您可以从主类中调用其
rollDie()
方法,因为访问修饰符设置为
public

package{

    import flash.display.Sprite;
    import flash.events.MouseEvent;

    public class Main extends Sprite{

        public var die:Die;

        public function Main()
        {
            //create a die
            this.die = new Die();
            addChild(die);

            var button:MovieClip = new MovieClip();
            addChild(button);
            button.addEventListener(MouseEvent.CLICK, onButtonClick);
        }

        private function onButtonClick(e:MouseEvent):void
        {
            this.die.rollDie();
        }
    }

    /**
    * Die inherits from Sprite
    */
    public class Die extends Sprite {

        public function Die() {}

        public function rollDie():void 
        {
            var result:int = Math.ceil( Math.random()*6 );
            trace("rolling die: " + result);
        }
    }
}

如果属性是公共的,其他类可以与它们通信。但是它们需要从该实例引用实例。当您像在视频中那样创建实例时,如何将另一个实例告知实例,每个实例都知道另一个实例。为每个类指定一个公共属性,您将使用该属性引用另一个对象。创建实例时,请将实例的属性设置为引用其他实例。然后你可以使用点符号语法来调用公共方法或访问每个实例的公共访问修饰符。谢谢karma,有没有一个例子来证明这一点?我宁愿不要,因为你所问的有点违背OOP原则,其他开发人员会对我说出来。创建对象时不应依赖于其他对象。你能给我一个你的代码的例子,让我知道你到底想做什么吗?然后我可以建议你最好的解决方案。虽然视频显示了当你创建对象并改变彼此之间的状态时是多么容易,但这看起来很难,而且是一种从语法上完成同样事情的技巧。因为这个例子是Wooosh,飞过我的头…欢迎来到设计模式的奇妙世界!这个例子不是黑客。这就是您实现所需功能的方式。另一个选项是依赖项注入。有没有合适的方法以编程方式创建两个按钮,每个按钮来自不同的类,并且能够相互访问?比如改变另一个按钮上的文字?我一定离这里很远了,我只是想在舞台上放一个列表,在一个小节目中进行一些互动。提前谢谢。