无法在MouseCoordinations

时间:2016-09-23 21:11:18

标签: actionscript-3

我要做的是,每次在MouseX和MouseY上放置一个新塔。但它似乎不适用于任何想法的人?

或者如果你可以创建一个tileMap数组并在每次点击Tower(x = 50,y = 400)时添加PrototypeTower的新子节点以选择并放置在我们想要的任何地方。当我单击x = 50,y = 400的框时,startDrag()不起作用。

Main.as

package
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.ui.Mouse;

    public class Main extends Sprite 
    {
        private var  pTower:PrototypeTower = new PrototypeTower;
        private var zTower:PrototypeTower = new PrototypeTower;
        private var fTower:PrototypeTower = new PrototypeTower;
        public function Main() 
        {
            pTower.x = 50;
            pTower.y = 400;
            addChild(pTower);

            addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
        }
        private function onAddedToStage(e:Event):void
        {
            removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);

            pTower.addEventListener(MouseEvent.CLICK, onClicked);
        }
        private function onClicked(e:Event):void
        {
            removeEventListener(MouseEvent.CLICK, onClicked);

            zTower.x = mouseX;
            zTower.y = mouseY;
            addChild(zTower);
            zTower.startDrag();

            addEventListener(MouseEvent.CLICK, onPlaced);
        }
        private function onPlaced(e:Event):void
        {
            removeEventListener(MouseEvent.CLICK, onPlaced);
            zTower.stopDrag();
            fTower.x = mouseX
            fTower.y = mouseY;

            addChild(fTower);

        }
    }
}

PrototypeTower.as

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

    public class PrototypeTower extends MovieClip 
    {   
        public function PrototypeTower() 
        {
            this.graphics.beginFill(0x00FF00);
            this.graphics.drawRect(this.x, this.y, 20, 20);
            this.graphics.endFill();
        }
    }
}

谢谢你,我完全是诺布,几天来一直在想!

1 个答案:

答案 0 :(得分:0)

对不起,这只是暂时的原理图。如果你需要,我会尽力改进它。希望这能为你清除一些事情

单击塔时,在鼠标的x,y处添加一个新塔,并在刚刚添加的新塔上执行某种startDrag(tower)。然后当您单击舞台时,停止拖动并设置新的X,y

修改

您可以尝试删除所有removeEventListener调用

我认为您的问题是您正在删除主函数中添加的事件侦听器。请记住,文档类的main函数(类构造函数)只被称为一次,因此您只需为ADDED_TO_STAGE添加一次事件侦听器,然后在第一次删除它时你试图在舞台上添加任何东西,你永远不会把它放回去。只是不要在第一时间删除它。

在将其添加到舞台之前,您正在调用zTower.startDrag()。请addChild(zTower)然后 zTower.startDrag()