【问题标题】:AddChild Function ErrorAddChild 函数错误
【发布时间】:2011-12-08 17:27:44
【问题描述】:

我创建的这个 addChild 函数遇到了问题(这个函数位于 Document Class 中):

public function enemySpawn(locX:Number,locY:Number)
{
    stage.addChild(this.basicEnemy);
    this.basicEnemy.x = locX;
    this.basicEnemy.y = locY;
}

基本上,每当我从文档类的构造函数中调用此函数时,它只会用下一个子代​​替换前一个子代。有什么办法可以解决这个问题吗?

这是文档类,以防万一你们需要它:

package com.basicSurvivalEngine.documentClass
{
    import com.basicSurvivalEngine.assetHolders.*;
    import flash.events.*;
    import flash.display.*;

    public class Document extends MovieClip
    {
        public var mcMain:Player;
        public var basicEnemy:BasicEnemy;
        public var survivalLevel:MovieClip;
        public var wallCollisionArray:Array = new Array();

        public function Document()
        {
            mcMain = new Player(this);
            basicEnemy = new BasicEnemy(this);
            addEventListener(Event.ADDED_TO_STAGE,init);
            // constructor code
        }
        public function init(event:Event)
        {
            addEventListener(Event.ENTER_FRAME,update);
            addEventListener(Event.ENTER_FRAME,levelHandler);
            addEventListener(Event.ENTER_FRAME,levelTransition);
            addEventListener(Event.ENTER_FRAME,vCamMovement);
            this.enemySpawn(-2800, 650);
            this.enemySpawn(-2700, 650);
            this.enemySpawn(-2600, 650);
            this.enemySpawn(-2500, 650);
            addChild(mcMain);
            mcMain.x = 225;
            mcMain.y = 100;
        }
        public function update(event:Event)
        {

        }
        public function levelHandler(event:Event)
        {
            this.survivalLevel = this["survivalLevel"];
            for (var i:int = numChildren - 2; i >= 0; i--)
            {
                var child:DisplayObject = getChildAt(i);
                if (child.name == "wallCollision")
                {
                    this.wallCollisionArray.push(child);
                }
            }
        }
        public function levelTransition(event:Event):void
        {

        }
        public function vCamMovement(event:Event):void
        {
            this.mcMain.x -= (x-(((mcMain.x+(mcMain.width/2))-(stage.stageWidth/2))*-1))/15;
            this.mcMain.y -= (y-(((mcMain.y+(mcMain.height/2))-(stage.stageHeight/2))*-1))/15;
            this.survivalLevel.x -= (x-(((mcMain.x+(mcMain.width/2))-(stage.stageWidth/2))*-1))/15;
            this.survivalLevel.y -= (y-(((mcMain.y+(mcMain.height/2))-(stage.stageHeight/2))*-1))/15;
            this.basicEnemy.x -= (x-(((mcMain.x+(mcMain.width/2))-(stage.stageWidth/2))*-1))/15;
            this.basicEnemy.y -= (y-(((mcMain.y+(mcMain.height/2))-(stage.stageHeight/2))*-1))/15;
        }
        public function enemySpawn(locX:Number,locY:Number)
        {
            stage.addChild(this.basicEnemy);
            this.basicEnemy.x = locX;
            this.basicEnemy.y = locY;
        }

    }

}

【问题讨论】:

    标签: actionscript-3 flash-cs5


    【解决方案1】:

    据我观察,每次调用enemySpawn 时,您只是在舞台上添加相同的对象(basicEnemy)。那是你的问题,如果你想产生一个新的敌人,它应该是一个新的 obj

    【讨论】:

      【解决方案2】:

      试试这个:

          protected var enemies:Array = new Array();
          public function enemySpawn(locX:Number,locY:Number)
          {
              var basicEnemy = new BasicEnemy(this);
              stage.addChild(basicEnemy);
              basicEnemy.x = locX;
              basicEnemy.y = locY;
              enemies.push(basicEnemy);
          }
      
          public function vCamMovement(event:Event):void        
          {
                  this.mcMain.x -= (x-(((mcMain.x+(mcMain.width/2))-(stage.stageWidth/2))*-1))/15;
                  this.mcMain.y -= (y-(((mcMain.y+(mcMain.height/2))-(stage.stageHeight/2))*-1))/15;           
                  this.survivalLevel.x -= (x-(((mcMain.x+(mcMain.width/2))-(stage.stageWidth/2))*-1))/15;                  this.survivalLevel.y -= (y-(((mcMain.y+(mcMain.height/2))-(stage.stageHeight/2))*-1))/15;            
                  foreach(var enemy in eneimes) {
                      enemy.x -= (x-(((mcMain.x+(mcMain.width/2))-(stage.stageWidth/2))*-1))/15;
                      enemy.y -= (y-(((mcMain.y+(mcMain.height/2))-(stage.stageHeight/2))*-1))/15;
                  }        
              }
      

      删除public var basicEnemy:BasicEnemy;并创建一个新敌人

      【讨论】:

      • 创造一个新敌人是什么意思?
      • BasicEnemy 的新实例。您正在向舞台上添加相同的对象,该对象已经在舞台上。所以你需要使用 Basic Enemy 的新实例
      • ...我需要用什么代码替换public var basicEnemy:BasicEnemy;
      • 删除public var basicEnemy:BasicEnemy;后我现在得到空对象引用...
      猜你喜欢
      • 1970-01-01
      • 2014-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多