我要做的是,每次在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();
}
}
}
谢谢你,我完全是诺布,几天来一直在想!
答案 0 :(得分:0)
对不起,这只是暂时的原理图。如果你需要,我会尽力改进它。希望这能为你清除一些事情
单击塔时,在鼠标的x,y
处添加一个新塔,并在刚刚添加的新塔上执行某种startDrag(tower)
。然后当您单击舞台时,停止拖动并设置新的X,y
修改强>
您可以尝试删除所有removeEventListener调用
我认为您的问题是您正在删除主函数中添加的事件侦听器。请记住,文档类的main函数(类构造函数)只被称为一次,因此您只需为ADDED_TO_STAGE
添加一次事件侦听器,然后在第一次删除它时你试图在舞台上添加任何东西,你永远不会把它放回去。只是不要在第一时间删除它。
在将其添加到舞台之前,您正在调用zTower.startDrag()
。请addChild(zTower)
和然后 zTower.startDrag()