AS3 - 如何删除我点击的项目?

时间:2016-01-07 00:26:23

标签: actionscript-3 flash

我是AS3的新手,我有一个愚蠢的小问题,我无法过去。

我有一个场景,当我点击舞台时,我会生成一个MovieClip框并以网格方式放在舞台上。我想再次点击它删除它,但这部分不起作用。我想我把它缩小到removeChild()脚本本身,因为在AS3中,我得到DisplayObject错误......但是,这就是我发现的,我可能错了。在大多数情况下,我正在使用'WonderFL'网站进行测试。

package {
    import flash.display.AVM1Movie;
    import flash.display.Shape;
    import flash.geom.Rectangle;
    import flash.events.MouseEvent;
    import flash.display.MovieClip;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        public function FlashTest() {

//Begin Code

//Event Listeners
stage.addEventListener(MouseEvent.MOUSE_DOWN, stageClick);

//Variables
var squareSize:Number = 120;
var xGridPos:Number = 0;
var yGridPos:Number = 0;
var tallyContainer:MovieClip = new MovieClip();

//Clicking on the stage
function stageClick(me:MouseEvent):void {
    xGridPos = Math.floor(stage.mouseX/squareSize) * squareSize;
    yGridPos = Math.floor(stage.mouseY/squareSize) * squareSize;
    createTally();
}

//Clicking on a tally
function tallyDown(me:MouseEvent):void {
    removeChild(tally);
    var visibleTrace:MovieClip = new MovieClip();
    visibleTrace.graphics.beginFill (0x000000, 1) ;
    visibleTrace.graphics.drawRect (0, 0, 20, 20);
    visibleTrace.graphics.endFill();
    addChild(visibleTrace);
} 

//Creating a tally
function createTally():void {
    var tally:MovieClip = new MovieClip();
    tally.graphics.beginFill(0xDD1111, 1) ;
    tally.graphics.drawRect(xGridPos, yGridPos, squareSize, squareSize) ;
    tally.graphics.endFill() ;
    tally.addEventListener(MouseEvent.MOUSE_DOWN, tallyDown);
    addChild(tally);
}

//End Code            
        }
    }
}

我尝试查找解决方案(Stack Overflow上有关于苹果和熊的其他帖子),但我无法成功实现它们。我还查找了Arrays和Loops(特别是关于code.tutsplus的'Basix'教程)。再一次,我无法成功实施它们。

删除计数器时我做错了什么?

1 个答案:

答案 0 :(得分:1)

除了DisplayObject错误之外,您的代码中存在一些小问题,让我们看看它们。

首先,您不能将所有代码放在类的构造函数中,因此您的类可以是这样的:

package {

    // imports

    public class FlashTest extends Sprite 
    {   
        // properties and constants declaration part

        // constructor
        public function FlashTest() 
        {
            // class's initialization instructions and other stuff
        }

        // other methods

    }
}

然后,在tally函数(createTally())内创建的var tally:MovieClip = new MovieClip();对象是它自己的本地对象,它在它之外是不可访问的(当然undefined),所以其他功能无法使用它。

但在您的情况下,您甚至不需要访问该对象,因为要获取当前单击的对象,您可以使用target实例的MouseEvent属性:

function tallyDown(me:MouseEvent):void 
{
    var tally:MovieClip = MovieClip(me.target);

    // then to remove that "tally" :
    tally.parent.removeChild(tally);

    // ...
}

...

顺便说一句,您可以使用免费的FlashDevelop来测试您的代码...

希望可以提供帮助。