Actionscript 3 是什么导致堆栈溢出?为什么这些行会导致堆栈溢出,如何修复?

Actionscript 3 是什么导致堆栈溢出?为什么这些行会导致堆栈溢出,如何修复?,actionscript-3,flash,Actionscript 3,Flash,我收到了堆栈溢出错误,我不确定什么是堆栈溢出错误,也不知道如何修复它。我在网上查找,试图了解堆栈溢出,但我很迷茫。如果有人能向我解释我的代码中是什么导致了溢出,那就太好了 这是我的英雄课程: package { import flash.events.Event; import flash.events.KeyboardEvent; import flash.display.MovieClip; public class Hero extends Docume

我收到了堆栈溢出错误,我不确定什么是堆栈溢出错误,也不知道如何修复它。我在网上查找,试图了解堆栈溢出,但我很迷茫。如果有人能向我解释我的代码中是什么导致了溢出,那就太好了

这是我的英雄课程:

package {

    import flash.events.Event;
    import flash.events.KeyboardEvent;
    import flash.display.MovieClip;

    public class Hero extends DocumentMainNew
    {
        public var health:Number;
        public var mana:Number
        public var vx:Number;
        public var vy:Number;
        public var allowJump:Boolean;
        public var collision:Boolean;

        public function Hero():void
        {
            this.addEventListener(Event.ENTER_FRAME, enterFrameHandler);
            stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
            stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler);
        }

        public function enterFrameHandler(e:Event):void
        {
            //Gravitates the player
            vy += 2;

            //Moves the player
            angela.x += vx;
            angela.y += vy;
            //processes collisions 
            processCollisions();
            //scrolls the stage
            scrollStage();
        }
        public function keyDownHandler(e:KeyboardEvent):void
        {
            switch (e.keyCode)
            {
                case 37: //left arrow
                    vx = -7;
                    break;
                case 39: //right arrow
                    vx = 7;
                    break;
                case 38: //up arrow
                    if(allowJump)
                    {
                        vy = -20;
                    }
                    break;
                default:
            }
        }
        public function keyUpHandler(e:KeyboardEvent):void
        {
            switch (e.keyCode)
            {
                case 37:
                    vx = 0;
                    break;
                case 39:
                    vx = 0;
                    break;
                case 38:
                    break;
                default: 
            }
        }
        public function processCollisions():void
        {
            //detects when player is falling
            if(vy > 0)
            {
                //respawns the player if they fell of the stage
                if(angela.y > stage.stageHeight)
                {
                    angela.x = _startMarker.x;
                    angela.y = _startMarker.y;
                    _boundaries.x = 0;
                    _boundaries.y = 0;
                    vy = 0;
                }
                //otherwise, processes collisions with boundaries
                while(_boundaries.hitTestPoint(angela.x, angela.y, true))
                {
                    allowJump = true;
                    angela.y -= 0.1
                    vy = 0;
                }
            }
        }
    }
}
这是我的主要文件:

package {

    import flash.display.MovieClip
    import flash.events.Event
    import flash.events.KeyboardEvent
    import Hero
    public class DocumentMainNew extends MovieClip
    {
        public var angela:Hero = new Hero;
        public var enemy1:Enemy = new Enemy;
        public var _boundaries:Boundaries;
        var _startMarker:StartMarker; 

        public function DocumentMainNew():void
        {
            _startMarker.visible = false;
            addChild(angela);
            addChild(enemy1);
            angela.health = 100;
            angela.mana = 100;
            stage.focus = stage;
        }

        public function scrollStage():void
        {
            _boundaries.x += (stage.stageWidth * 0.5) - angela.x;
            angela.x = stage.stageWidth * 0.5;
            enemy1.x = _boundaries.x + 30;
            _powerup.x = _boundaries.x - 200;

        }
    }
}
错误如下:

错误:错误#1023:发生堆栈溢出。
在DocumentMainNew()[/Users/s2111908/Desktop/Game/DocumentMainNew.as:9]在Hero()[/Users/s2111908/Desktop/Game/Hero.as:16]

DocumentMainNew的第9行是:public var angela:Hero=新英雄; Hero的第16行是:公共函数Hero():void


它多次在DocumentMainNew()和Hero()上显示,但我不想全部粘贴。如果次数很重要,让我知道,我会在广告上刊登一张照片。我是AS3的新手,所以如果有人对如何改进我的代码有任何建议,请告诉我

首先。请学习如何在发布时格式化您的代码。整个代码块必须缩进。有一个{}按钮就是为了这个

。您的错误是Hero扩展DocumentMainNew类。问题不是扩展自身,而是在DocumentMainNew变量声明区域中调用new Hero。让我们看看,进展如何

  • 已创建DocumentMainNew的根实例
  • 声明angela变量并为其分配新英雄
  • 将创建一个英雄的实例
  • Hero正在扩展DocumentMainNew,因此超类首先初始化
  • 声明angela变量并为其分配新英雄
  • 将创建一个英雄的实例
  • ……等等

  • 我不知道你为什么从DocumentMainNew类继承了Hero类,但那是一个完全错误的举动。你应该解释一下你是如何解决这个问题的。这可能应该以一种完全不同的方式来解决。

    这是两个完全不同的问题。第一次你尝试谷歌了吗?是的,我不明白它在说什么。我想我刚刚发现了问题所在。我将公共类Hero Extended DocumentMain新更改为…Extended MovieClip。唯一的问题是现在它在纽约找不到安吉拉。我不确定我应该用谷歌来解决这个问题。我对AS3还很陌生,所以我不知道它是这样工作的。你对如何修复它有什么建议吗?我对格式也不好。我一直在粘贴actionscript中输入的代码,但这里的代码很奇怪。谢谢你的帮助。@BradleyG正如我所说的,你需要解释一下你试图实现的目标,因为为了解决这个问题,我应该理解你的目标,而我不理解。最简单显而易见的一步是:不要从新继承英雄。让它成为电影界的英雄。您可能还想学习OOP的基本概念:英雄类就是玩家。所以英雄类主要包含玩家的控件。我希望英雄类包含所有与玩家相关的代码。我熟悉OOP的概念,只是在actionscript中不太熟悉。“我已经读了很多关于它的Adobe信息,但我仍在努力。@BradleyG若你们想让英雄类的所有核心都和玩家相关,就把它放在那个里吧,不是吗?”?对不起,我还是不明白这个问题。