Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/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 saprate类中的hitTestObject_Actionscript 3_Actionscript_Hittest - Fatal编程技术网

Actionscript 3 saprate类中的hitTestObject

Actionscript 3 saprate类中的hitTestObject,actionscript-3,actionscript,hittest,Actionscript 3,Actionscript,Hittest,我正在做一个简单的游戏。这是我面临的问题,但首先我要告诉你我的班级结构。 (我正在使用flash cs5.5) 敌人。as:该类与MovieClip(在库中)链接,具有简单敌人移动和方向的代码 Hero.as:与库中的MovieClip链接。英雄简单动作守则 EnemyManager.as:每20秒创建一个新敌人 HeroManager.as:创建英雄(仅一次,其他功能将在以后添加) HittingManager.as:检查共谋(这里有问题) 现在我的问题出现在HittingManager.as

我正在做一个简单的游戏。这是我面临的问题,但首先我要告诉你我的班级结构。 (我正在使用flash cs5.5)

敌人。as
:该类与MovieClip(在库中)链接,具有简单敌人移动和方向的代码

Hero.as
:与库中的MovieClip链接。英雄简单动作守则

EnemyManager.as
:每20秒创建一个新敌人

HeroManager.as
:创建英雄(仅一次,其他功能将在以后添加)

HittingManager.as
:检查共谋(这里有问题

现在我的问题出现在
HittingManager.as
类中,因为我想在这个类中添加HittTestObject函数。我将发布3个重要类的代码。(
EnemyManager.as
HeroManager.as

下面是EnemyManager.as类的代码

package 
{
import flash.display.MovieClip;
import flash.events.Event;
import flash.sampler.Sample;
import flash.display.Sprite;
import flash.utils.Timer;
import flash.events.TimerEvent;
import flash.sampler.NewObjectSample;

public class EnemyManager extends MovieClip
{

    private var hManager:HittingManager = new HittingManager();
    private var timer:Timer = new Timer(2000);
    public static var hitting:Boolean = false;
    public static var enemy:Enemy;

    public function EnemyManager()
    {           
        addEventListener(Event.ADDED_TO_STAGE, added);          
    }
    public function addEnemy(newEnemy:Enemy):void
    {
        addChild(newEnemy);
        hManager.registerEnemy(newEnemy);
    }

    private function added(event:Event):void
    {
        addEventListener(Event.ENTER_FRAME, update);
        trace("added enemy manger");
        timer.addEventListener(TimerEvent.TIMER, onTimer);
        timer.start();
    }
    private function onTimer(event:TimerEvent):void
    {           
         enemy = new Enemy();            

         this.addEnemy(enemy);
    }
    private function update(event:Event):void
    {

    }

    }

}
这里是Hittest.as类(我尝试了许多技术,但都没有成功),所以如果station为空,我就离开

package 
{
import flash.display.MovieClip;
import flash.events.Event;

public class HittingManager extends MovieClip
{
    private var eManager:EnemyManager;

    private var hEnemy:Enemy = new Enemy();
    private var _enemies:Array;
    private var _hero:Hero;
    public function HittingManager()
    {
        //trace("Hitting Manager working");
        _enemies = [];
        addEventListener(Event.ADDED_TO_STAGE, added);
    }
    public  function registerEnemy(newEnemy:Enemy):void
    {   
        _enemies.push(newEnemy);

    }
    public  function registerHero():void
    {
        //trace("heroRegisterd");
        _hero = HeroManager.hero;
        addChild(_hero);


    }

    private  function added(event:Event):void
    {
        if(!_hero)
        {
            this.registerHero();
        }
        trace("Hitting manger added");
        addEventListener(Event.ENTER_FRAME, update);
    }

    private function update(event:Event):void
    {


        if(_hero)
        {           
            for each( newEnemy:Enemy in _enemies)
            {
                if(_hero.hitTestObject(newEnemy) )
                {
                    trace("Hitting")
                }
            }
        }

    }
    }//class

}//package

下面的修订版使您的代码能够在尽可能少的更改下工作,但它绝不是一个理想的解决方案。 您可能应该重构代码,以便敌方管理者不需要对HittingManager的公共静态引用

package
{
    import flash.display.MovieClip;
    import flash.events.Event;

    public class HeroManager extends MovieClip
    {
        public static var hero:Hero = new Hero();

        public function HeroManager()
        {
            addEventListener(Event.ADDED_TO_STAGE, added);
        }

        private function added(event:Event):void
        {
            trace("hero manager added");

        }

    } //class

} //package

package
{
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.sampler.Sample;
    import flash.display.Sprite;
    import flash.utils.Timer;
    import flash.events.TimerEvent;
    import flash.sampler.NewObjectSample;

    public class EnemyManager extends MovieClip
    {

        public static var hManager:HittingManager;
        private var timer:Timer = new Timer(2000);
        public static var hitting:Boolean = false;
        public static var enemy:Enemy;

        public function EnemyManager()
        {
            addEventListener(Event.ADDED_TO_STAGE, added);
        }

        public function addEnemy(newEnemy:Enemy):void
        {
            addChild(newEnemy);
            hManager.registerEnemy(newEnemy);
        }

        private function added(event:Event):void
        {
            addEventListener(Event.ENTER_FRAME, update);
            trace("added enemy manger");
            timer.addEventListener(TimerEvent.TIMER, onTimer);
            timer.start();
        }

        private function onTimer(event:TimerEvent):void
        {
            enemy = new Enemy();

            this.addEnemy(enemy);
        }

        private function update(event:Event):void
        {

        }

    }

}


package
{
    import flash.display.MovieClip;
    import flash.events.Event;

    public class HittingManager extends MovieClip
    {
        private var _enemies:Array;
        private var _hero:Hero;

        public function HittingManager()
        {
            //trace("Hitting Manager working");
            _enemies = [];
            addEventListener(Event.ADDED_TO_STAGE, added);
        }

        public function registerEnemy(newEnemy:Enemy):void
        {
            _enemies.push(newEnemy);

        }

        public function registerHero():void
        {
            //trace("heroRegisterd");
            _hero = HeroManager.hero;
            addChild(_hero);

        }

        private function added(event:Event):void
        {
            if (!_hero)
            {
                this.registerHero();
            }
            trace("Hitting manger added");
            addEventListener(Event.ENTER_FRAME, update);
        }

        private function update(event:Event):void
        {

            if (_hero)
            {
                for each (var newEnemy:Enemy in _enemies)
                {
                    if (_hero.hitTestObject(newEnemy))
                    {
                        trace("Hitting")
                    }
                }
            }

        }
    } //class

} //package
在主文档类中,您应该具有以下内容:

var hittingManager:HittingManager =  new HittingManager();
EnemyManager.hManager = hittingManager;

var enemyManager:EnemyManager = new EnemyManager();
var heroManager:HeroManager = new HeroManager();

addChild(heroManager);
addChild(enemyManager);
addChild(hittingManager);

请解释一下“每个(变量敌人:敌人中的敌人)”我不太熟悉“每个”和“in”关键字。谢谢,请你解释一下“每个(var敌人:敌人在敌人中)”我对“每个”和“在”关键字有点陌生。谢谢,另外请告诉我应该在哪里访问RegisterEnmy/registerHero功能我为响应的延迟道歉,我整个周末都不在电脑旁。我希望澄清能有所帮助。朋友,我仍然有困惑,你能回应吗?所以我解释我的问题。
var hittingManager:HittingManager =  new HittingManager();
EnemyManager.hManager = hittingManager;

var enemyManager:EnemyManager = new EnemyManager();
var heroManager:HeroManager = new HeroManager();

addChild(heroManager);
addChild(enemyManager);
addChild(hittingManager);