Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 在OOP AS3中共享变量_Actionscript 3_Oop_Scope_Encapsulation - Fatal编程技术网

Actionscript 3 在OOP AS3中共享变量

Actionscript 3 在OOP AS3中共享变量,actionscript-3,oop,scope,encapsulation,Actionscript 3,Oop,Scope,Encapsulation,总的来说,我有以下几点: package { import flash.display.MovieClip; public class Main extends MovieClip { public var damage:Number; public function Main() { // constructor code var char:Character = new Charact

总的来说,我有以下几点:

package  {

    import flash.display.MovieClip;

    public class Main extends MovieClip {

        public var damage:Number;

        public function Main() {
            // constructor code

            var char:Character = new Character();
            addChild(char);
        }
    }
}
我还有一个叫做Character.as的包

package  {

    import flash.display.MovieClip; 

    public class Character extends MovieClip{

        public function Character() {
            trace(damage);
        }
    }
}

我需要能够与角色分享主要的伤害集。有什么方法可以使速度更全球化吗?

为什么不将损坏作为角色的公共财产,然后通过主类轻松访问它,如下所示:

char.damage = 100;
trace (char.damage);
public static var damage:Number;
为此,只需将属性添加到角色类中,如下所示:

public class Character extends MovieClip {

    public var damage:Number;

    public function Character() {
        trace(damage);
    }
}
但鉴于你的评论,我认为你宁愿一切都是全球性的,到处都可以访问,而不是应用面向对象的概念

如果是的话。。。只需在主类中将其定义为公共静态,如下所示:

char.damage = 100;
trace (char.damage);
public static var damage:Number;
要在执行此操作的任何位置访问它:

Main.damage = 100; 
trace(Main.damage);

还有另一种通过包发送值的方法(这种方法并不是真正共享变量,但对您可能有用)。这段代码的作用是类字符创建一个变量,该变量从主包中获取一个值:

更改字符。关于此:

package  {

import flash.display.MovieClip; 

public class Character extends MovieClip{

    public function Character(a:int) {
      //output will be the integer 10   
              trace(a);
    }
}
}
主要内容如下:

package  {

import flash.display.MovieClip;

public class Main extends MovieClip {

    private var damage:int = 10;

    private var char:Character = new Character(damage);

    public function Main() {

    }
}
}
  • 编辑:不适用于实时应用程序,因为只有在初始化
    private var char:Character=new Character(damage)
    时才会发送
    private var damage
    的值
因此,您的方法不太符合OOP。将其设置为公共静态变量。更新了我的答案。如果你想利用OOP,你应该退一步,学习一些基本的OOP设计概念/模式。谢谢你的建议。我想在尝试类似的东西之前,我需要学习更多关于oop的知识。谢谢。我确实认为先学习OOP更有效。从一本关于OOP的书/教程开始,可以大大加快速度。我完成了这一转变,它迅速有效地解决了我面临的许多问题。它看起来并不是更快,我相信我们都喜欢直接跳进去。但是,老实说,最快的途径是首先获得基本的理解。你不会浪费很多时间去想为什么你没有得到它,并尝试做一些简单的事情。这是行不通的,因为你正在他的角色类中创建一个主类的“新”实例,我假设这是他的文档类。你是对的。在character包中声明私有var\u main:main=New main()无效。我现在更新了。您当前的代码将允许他在创建
角色
实例时将伤害值传递给构造函数。在创建实例后,当他想要利用伤害时,情况如何?构造函数完成后,
a
不再存在,因为它是一个参数,不会存储在构造函数的属性中。还要记住,基本类型是作为值而不是引用传递的。因此,即使您将该值存储在属性中,如果在创建实例后损坏发生了变化,则
字符
实例将只具有传递给构造函数的损坏初始值。真实故事。这种将值发送到另一个包的方式对于实时计算是没有用处的。