首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ActionScript3.0-试图删除一个子级

ActionScript3.0-试图删除一个子级
EN

Stack Overflow用户
提问于 2011-12-09 13:29:46
回答 3查看 193关注 0票数 0

简单的问题,但我不能让它开始工作。所以我有一个有显示对象的类,一个球。我从Main.as创建它的实例,并运行一个for循环来检查我是否命中了球,如果我击中了球,我希望删除该对象。可是,我不会呀。

我的密码怎么了?

代码语言:javascript
复制
package 
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.ui.Mouse;
    import flash.events.TimerEvent;
    import flash.utils.Timer;


    public class Main extends Sprite 
    {
        private var clay:Clay;
        private var clayCollection:Vector.<Clay> = new Vector.<Clay>;
        private var crash:Crash;
        private var crashCollection:Vector.<Crash> = new Vector.<Crash>;
        private var timer:Timer = new Timer(0);
        private var newClayTimer:Timer = new Timer(1000);

        public function Main()
        {
            newClayTimer.start();
            newClayTimer.addEventListener(TimerEvent.TIMER, addNewClay);

            stage.addEventListener(MouseEvent.CLICK, checkForHit);
        }

        private function checkForHit(e:MouseEvent):void
        {
            if (clayCollection.length > 0)
            {
              for (var i:int = 0; i < clayCollection.length; i++) 
              {
                if (e.target.hitTestObject(clayCollection[i]))
                {
                    clayCollection.splice(i, 1);
                    removeChild(clayCollection[i]);
                }
              }
            }
        }

        private function addNewClay(e:TimerEvent):void
        {
            clay = new Clay();
            addChild(clay);
            clayCollection.push(clay);  
        }   
    }
}
EN

回答 3

Stack Overflow用户

发布于 2011-12-09 14:17:31

试试像这样的东西

代码语言:javascript
复制
for (var i:int = 0; i < clayCollection.length; i++)  {
   var clay:Clay = clayCollection[i];
   if (e.target.hitTextObject) {
      //seems to me all clays will hit test as true with the stage?
      removeChild(clay);
      clayCollection.splice(i, 1);
   }
}

这样,您就知道要删除的对象肯定是命中的那个测试为真。

票数 1
EN

Stack Overflow用户

发布于 2011-12-09 19:47:16

我同意艾米的观点,听一听粘土的例子,而不是舞台。您仍然可以从数组中删除它,如下所示(未经测试的代码):

代码语言:javascript
复制
package 
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.ui.Mouse;
import flash.events.TimerEvent;
import flash.utils.Timer;


public class Main extends Sprite 
{
    private var clay:Clay;
    private var clayCollection:Vector.<Clay> = new Vector.<Clay>;
    private var crash:Crash;
    private var crashCollection:Vector.<Crash> = new Vector.<Crash>;
    private var timer:Timer = new Timer(0);
    private var newClayTimer:Timer = new Timer(1000);

    public function Main()
    {
        newClayTimer.start();
        newClayTimer.addEventListener(TimerEvent.TIMER, addNewClay);


    }

    private function checkForHit(e:MouseEvent):void
    {
        // identify the target as Clay
        var clay:Clay = e.target as Clay;
        if(contains(clay)) removeChild(clay);

        // remove it from your array
        for each (var c:Clay in clayCollection) {
             if (c == clay) clayCollection.splice(clayCollection.indexOf(c), 1);
        }


    }

    private function addNewClay(e:TimerEvent):void
    {
        clay = new Clay();
        clay.addEventListener(MouseEvent.CLICK, checkForHit);
        addChild(clay);
        clayCollection.push(clay);  
    }   
  }
}
票数 0
EN

Stack Overflow用户

发布于 2013-07-11 04:22:51

当程序创建对象的实例,然后鼠标单击它时,调试器会抛出此错误。

主线程(挂起: RangeError:错误#1125:索引0超出了0范围)。

代码语言:javascript
复制
     Main/checkForHit

修正之处在于,在分割循环索引时,需要对其进行分隔。此外,当您应用剪接和分隔时的顺序也很重要。

代码语言:javascript
复制
package 
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.ui.Mouse;
import flash.events.TimerEvent;
import flash.utils.Timer;


public class Main extends Sprite {
    private var clay:Clay;
    private var clayCollection:Vector.<Clay> = new Vector.<Clay>;
    private var timer:Timer = new Timer(0);
    private var newClayTimer:Timer = new Timer(1000);

    public function Main(){
        newClayTimer.start();
        newClayTimer.addEventListener(TimerEvent.TIMER, addNewClay);
        stage.addEventListener(MouseEvent.CLICK, checkForHit);

    }//END MAIN()

    private function checkForHit(e:MouseEvent):void{

        if (clayCollection.length > 0)
        {
          for (var i:int = 0; i != clayCollection.length; i++) 
          {
            trace(i,clayCollection.length);
            if (e.target.hitTestObject(clayCollection[i]))
            {
               removeChild(clayCollection[i]);
                clayCollection.splice(i, 1);
               i--;
            } 
          }
        }
    }//END checkForHit()

    private function addNewClay(e:TimerEvent):void{
            clay = new Clay();
            addChild(clay);
            clayCollection.push(clay);
    }//END addNewClay()

}//END MAINCLASS

}//END PACKAGE
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8446171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档