我在AS3制作游戏。
我有一个名为emptyspace的孩子,在我的引擎中加入了我的舞台。就像那样:
emptyspace= new EmptySpace(stage, usableItems[0]);
addChild(emptyspace);
emptyspace2= new EmptySpace2(stage, usableItems[0]);
addChildAt(emptyspace2, 0);
每个emptyspace都有自己的类(EmptySpace.as和EmptySpace2.as)。
当我点击一个emptyspace时,会出现一个useBox(UseBox.as)
是否可以保存“内存中”点击emptyspace但稍后再使用它?
因为,然后,如果玩家想要建造或不打造,玩家可以在useBox中选择。
如果他点击“构建”,则会打开一个窗口,其中包含不同的建筑物(Building.as)。
现在,我想知道是否有可能当他点击“图书馆”作为例子时,图书馆出现在之前被点击的emptyspace(“保存的点击”)?
目前,我已经有了这段代码:
当他点击建筑物窗口中的“图书馆”时,它“调用此功能:
private function poulaillerConstruction(e:MouseEvent):void{
Engine.library.buildIt(e);
Engine.building.visible = false;
}
在Library.as中:
public function buildIt(e:MouseEvent):void{
stageRef.addChild(this);
this.visible = true;
}
所以,目前,它出现在屏幕上的任何地方(当然总是在同一个地方)而不是emptyspace所在的地方。
(如果我点击第二个空白区域,那么图书馆会出现在与第一个空白区域相同的位置......也不想要那个)。
有什么想法吗?
非常感谢,
修改
所以,我已经加入了 Engine.as
emptyspace.addEventListener(MouseEvent.CLICK, onEmptySpaceClicked);
private function onEmptySpaceClicked(e:MouseEvent):void{
trace("click on it neww");
var myVar = e.currentTarget;
if (e.currentTarget.name == emptyspace){
//Don't know what to put
}
if (e.currentTarget.name == emptyspace2){
}
}
现在,我该如何在Tower.as中输入我的buildIt函数“收听e.currentTarget.name?
这样的东西? :
public function buildIt(e:MouseEvent):void{
if (e.currentTarget.name == emptyspace){
//Build here
}
if (e.currentTarget.name == emptyspace2){
//Build here
}
}
什么是代码告诉“在这里点击emptyspace”?
非常感谢,
答案 0 :(得分:1)
您可以存储单击的'currentTarget'(调用侦听器的对象)。所以假设你已经在emptyspace上创建了一个eventlistener:
emptyspace.addEventListener(MouseEvent.CLICK, onEmptySpaceClicked);
对于每个emptyspace的按钮处理程序,您可以像这样在类变量'myVar:EmptySpace'中捕获该对象:
function onEmptySpaceClicked(e:MouseEvent):void{
myVar = e.currentTarget;
// do something more
}
编辑:
我不确定这是否是您需要澄清的内容......
你提到你想保存以后选择哪个emptyspace,所以在onEmptySpaceClicked处理程序中,我不确定你输入if语句的原因是什么。如果你想让其他对象知道已经选择了一个空白区域,你可以在单击emptySpace时在if语句中使用dispatchEvent,但我不确定这是最好的方法。
如果你有一个buildingManager,你可以让if语句调用一个方法并传递单击EmptySpace的引用。这取决于你的设计..
if (e.currentTarget.name == emptyspace){
buildManager.buildCurrentBuilding(myVar);
}
虽然上面你不需要if语句,但你只需让处理程序将myVar发送到buildingManager。只有当你想要在每个EmptySpace上发生不同的事情时才需要if语句。
要稍后将一个displayObject添加到emptyspace中,您可以使用
myVar.addChild(displayBuildingToAdd);
Engine.as可能会使用getter提供引用:
public function get currentEmptySpace():EmptySpace {
return myVar;
}
你需要将myVar传递给任何'building'或者buildingManager想要将建筑添加到emptyspace。