Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.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 如何使用其他类/文件中的函数?AS3_Actionscript 3_Flash_Class_Scope - Fatal编程技术网

Actionscript 3 如何使用其他类/文件中的函数?AS3

Actionscript 3 如何使用其他类/文件中的函数?AS3,actionscript-3,flash,class,scope,Actionscript 3,Flash,Class,Scope,我一直在网上搜索,读了好几个小时都没有运气。可能是因为它太基本了,可能是因为我对术语感到困惑。这里真是个绝妙的地方。很快就要拿起一本书了,但在那之前,也许有人能帮我澄清这一点 我正在做一个简单的rpg风格的游戏。我有多个文件。MainClass.as、Hero.as、FrontEnd.as和Levels.as。我把它们都做成了公共课。我在FrontEnd.as中有一个名为gotoMainMenu的函数,在Hero.as中有一个名为currentHP的变量。我想做一个函数来检查当前的HP和 if(

我一直在网上搜索,读了好几个小时都没有运气。可能是因为它太基本了,可能是因为我对术语感到困惑。这里真是个绝妙的地方。很快就要拿起一本书了,但在那之前,也许有人能帮我澄清这一点

我正在做一个简单的rpg风格的游戏。我有多个文件。MainClass.as、Hero.as、FrontEnd.as和Levels.as。我把它们都做成了公共课。我在FrontEnd.as中有一个名为gotoMainMenu的函数,在Hero.as中有一个名为currentHP的变量。我想做一个函数来检查当前的HP和

if(currentHP <= 0) {gotoMainMenu()}
从我读到的内容来看,我需要在我的Hero类中实例化FrontEnd.as来访问它的函数。。。但这对我不起作用。所有文件都在同一个文件夹中。我试过这个:

var frontend:FrontEnd = new FrontEnd();
addChild(frontend);
if(currentHP <= 0) {frontend.gotoMainMenu()}
但这也不行。 还尝试导入类。。。
如何从另一个类中访问函数和变量?

这里要做的是依赖项注入

相反,您希望将舞台上存在的allready前端实例传递到您的英雄类中,而不是在您的英雄类中创建新的前端实例

例如,您的Hero类的构造函数可能如下所示:

public function Hero (frontend:FrontEnd) {
this.frontEnd = frontEnd;
}

And then you can do 
if(currentHP < 0 ) { frontEnd.gotoMainMenu()};
package {
public class Hero {

    public var frontEnd:FrontEnd;
    public var levels:Levels;
    public var weapon:Weapon;

    public function Hero() {

    }

    public function fire(){
        if(weapon){
        weapon.fire();
        }
    }

    public function getHit()
    {
       if(frontEnd)
       { 
         if(currentHP < 0) { frontEnd.gotoMainMenu();}
       }
    }
    public function increaseScore() {
        if(levels){
            levels.increaseScore();
        }
    }

}
}
var hero:Hero = new Hero();
hero.levels= levels;
hero.frontEnd = frontEnd;
hero.weapon = machineGun;
addEventListener(Hero.DIED, handleDeath);

private function handleDeath(e:Event){
  frontEnd.gotoMainMenu();
}
或者,您可以使用依赖项注入框架(如RobotLegs2)为您完成这项工作

然而,在这种情况下,这不是正确的处理方法。 在这种特殊情况下,您真正想要做的是分派一个事件

所以,你应该:

import flash.events.EventDispatcher;
import flash.events.Event;
public class Hero extends EventDispatcher{


}
然后在某个函数中,你会写:

if(currentHP < 0 ) {dispatchEvent(new Event(DIED));}
调度一个事件的最大优点之一是,您可以让多个事物监听同一事件。或者,您甚至可以切换侦听事件的内容

所以你可以做:

if(hasRessurection)
{
  hero.addEventListener(Hero.DIE, restartLevel,false,0,true);
  town.addEventListener(Hero.DIE, increaseRessurectionCost, false,0,true)
} else {
  hero.addEventListener(Hero.DIE, gotoMainMenu,false,0,true);
}

可能与C:\…\Flash Files\Hero.as重复,第10 1017行:未找到基类EventDispatcher的定义。我是否需要制作一个BackEnd.as文件来处理这些事情?如果我想从多个类调用函数呢?像公共函数Hero frontend:frontend,levels:levels一样,您需要导入EventDispatcher。是的,如果您需要访问更多的类,您可以注入更多的类。一旦您开始有3个以上的类要注入,我将使用另一个方法,我现在正在添加到答案中。